home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / program / 590 / doc / commands.doc < prev    next >
Encoding:
Text File  |  1992-01-06  |  177.2 KB  |  4,860 lines

  1.     ===============================================
  2.  
  3. @(#)      OKAMI SHELL VERSION 1.4 - KOMMANDO-REFERENZ
  4.  
  5.     ===============================================
  6.             Stand: 8.12.91
  7.  
  8.  
  9.     BITTE ERST DIE DATEIEN README UND OKAMI.DOC LESEN!
  10.  
  11.  
  12.  
  13. Dies ist eine Referenzdatei, die man sich einmal kurz durchlesen sollte,
  14. um zu sehen, was die Shell alles zu bieten hat. Die einzelnen Abschnitte
  15. können während der Arbeit mit der Shell durch Druck auf die Help-Taste
  16. angesehen werden. Dazu muß der Dateiname dieser Datei in der Shellvariablen
  17. HELPFILE gespeichert sein.
  18.  
  19. Zu jedem Kommando wird die Syntax des Kommandos sowie, falls vorhanden, die
  20. zum Laufen des Kommandos notwendigen Dateien angegeben.
  21. Für die Syntaxschreibweise gilt:
  22.     Angaben in [] (eckigen Klammern) koennen, muessen aber nicht
  23.     angegeben sein.
  24.     Angaben in {} (geschwungenen Klammern) koennen beliebig oft
  25.     (auch null mal) angegeben sein.
  26.     Von durch | (senkrechten Strich) getrennten Angaben wird
  27.     jeweils eine erwartet.
  28. Numerische Werte koennen in folgender Form angegeben werden:
  29.     1234        entspricht der dezimalen Zahl 1234
  30.     01234        entspricht der oktalen Zahl 1234 (=668 dezimal)
  31.     0x1234        entspricht der Hex-Zahl 1234 (=4660 dezimal)
  32.     %1011        entspricht der Binärzahl 1011 (=11 dezimal)
  33.     !A        entspricht dem Ascii-Code von A (=65 dezimal)
  34. Vor jedem dieser Formate kann ein Minuszeichen stehen, um eine negative Zahl
  35. anzuzeigen. ACHTUNG: Bei Kommandos, die Flags benutzen, wird dieses Minus-
  36. zeichen als Einleitung der Flags und daher die folgende Zahl als die Flags
  37. angesehen, was normalerweise in einem Syntaxfehler endet. Daher muß in sol-
  38. chen Fällen die Zahl in (einfache oder doppelte) Anführungszeichen gesetzt
  39. werden.
  40.  
  41. Steuersequenzen, z.B. VT52-Codes, können mit dem Fluchtsymbol ^ (Dach)
  42. benutzt werden. Die Verwendung des Fluchtsymbols ist unter dem internen
  43. Kommando "echo" beschrieben. Das dort gesagte gilt auch für alle anderen
  44. Kommandos.
  45.  
  46. Flags können einzeln, aber auch in Gruppen durch das jeweilige Kennungs-
  47. zeichen eingeleitet werden, z.B. sind äquivalent:
  48.     wc -lcn
  49. und    wc -l -c -n
  50.  
  51. Dies gilt nicht, wenn die Flags aus mehr als einem Zeichen bestehen oder
  52. wenn zusätzliche Informationen angegeben werden, wie z.B. bei format oder
  53. rsconf. Außerdem erlauben einige Kommandos nicht die Zusammenfassung oder
  54. die Einzelschreibweise, dies ist dann jeweils angegeben.
  55.  
  56. Es gibt einige Flags, die sich eingebürgert haben und bei einigen Kommandos
  57. (nicht bei allen) dieselbe Bedeutung haben, diese sind:
  58.  
  59.     -a (alle)        (das Kommando tut etwas für alle in Frage
  60.                  kommenden Argumente. Bsp.: pwd, ls)
  61.     -i (interaktiv)        (das Kommando fragt den Anwender nach
  62.                  gewissen Dingen. Bsp.: rm)
  63.     -l (lang)        (gibt zusätzliche oder ausführlichere Informa-
  64.                  tionen. Bsp.: ls, ver)
  65.     -v (verbose)        (das Kommando sagt, was es tut, Bsp.: format)
  66.     -q (quiet)        (das Kommando erzeugt keine Ausgabe, oder:)
  67.        (query)        (wie -i)
  68.     -f (fast)        (das Kommando umgeht Sicherheitsabfragen u.ä.,
  69.                  um so schnell wie möglich zu laufen. Bsp.:
  70.                  rm, shutdown)
  71.     -r (rekursiv)        (das Kommando läuft rekursiv über den Datei-
  72.                  baum. Bsp: rm)
  73.  
  74. Hinweis: Alle Angaben über Shellscripts (z.B. "Verwendung nur in Shellscripts
  75. erlaubt") gelten ebenso für Shellfunktionen.
  76.  
  77.  
  78. 0) Nicht-dokumentierte Kommandos:
  79.  
  80. Gibt es, na klar. Sie werden hier nicht erklärt, da sie sonst ja nicht mehr
  81. nicht-dokumentiert währen. Mit `cmds' kann man die Namen aller Kommandos heraus-
  82. finden, auch die der nicht-dokumentierten. Man kann sie auch benutzen, aber
  83. man sollte sich nicht darauf verlassen, daß sie in späteren Versionen der
  84. Shell noch genauso wie in der jetzigen funktionieren oder überhaupt noch vor-
  85. handen sind.
  86. Wer das Zauberwort findet, hat gewonnen.
  87.  
  88.  
  89. 1) Interne Kommandos:
  90.  
  91. Interne Kommandos werden aufgerufen, indem man am Shell-Prompt den Namen
  92. des Kommandos, gefolgt von den Parametern, eingibt.
  93.  
  94. Rückgabewerte:
  95. Jedes interne Kommando gibt einen numerischen Wert zurück, der sich nach Aus-
  96. führung des Programms in der Shellvariablen "?" befindet. Außerdem wird
  97. der Rückgabewert von den Kommandos if und while benutzt.
  98. Normalerweise geben die Kommandos -1 zurück, wenn ein Syntaxfehler beim
  99. Aufruf oder ein anderer Fehler aufgetreten ist, und 0, wenn bei der Aus-
  100. führung keine Fehler aufgetreten sind. Daher werden die Rückgabewerte der
  101. internen Kommandos im folgenden nur angeführt, wenn sie von dieser Konven-
  102. tion abweichen.
  103.  
  104.  
  105. Folgende interne Kommandos sind implementiert:
  106.  
  107.  
  108. -----
  109. . - Eine Datei als Shellscriptausführen
  110.  
  111. Syntax: . Dateiname
  112.  
  113. Die angegebene Datei wird als Shellscript ausgeführt. Es muß der voll-
  114. ständige Dateiname (relativ oder absolut) angegeben werden. Die Shell-
  115. variablen PATH und SEXT sind ohne Wirkung.
  116. Beispiele:
  117.     . $HOME\profile
  118.         führt das Login-Script aus.
  119.     . hallo.sh
  120.         führt die Datei hallo.sh als Shellscript aus.
  121.     . hallo
  122.         führt die Datei hallo als Shellscript aus.
  123.  
  124. -----
  125. [ - SIEHE test
  126.  
  127. -----
  128. adr - Diverse Systemadressen ausgeben
  129.  
  130. Syntax: adr
  131.  
  132. Ausgabe der folgenen Adressen:
  133.     argv        Adresse des Argumentenvektors der Shell
  134.     Command line    Adresse der Kommandozeile (Parameter)
  135.     Environment    Adresse des Environment-Strings der Shell
  136.     VarTable    Adresse der Variablen-Tabelle der Shell
  137.     Commands    Adresse der Kommandotabelle der Shell
  138.     AdrTab        Adresse der Tabelle mit den auszugebenden Adressen
  139.     Physbase    Adresse des physikalischen Bildschirms
  140.     Logbase     Adresse des logischen Bildschirms
  141.     DTA        Adresse des Disk-Transfer-Bereiches
  142.     Phystop     Physikalisches Ende des RAM-Speichers
  143.             (Adresse des ersten nicht vorhandenen Bytes)
  144.     Membot        Unterste Adresse des verfügbaren Speichers
  145.     Memtop        Oberste Adresse des verfügbaren Speichers
  146.     Basepage    Adresse der Basepage der Shell
  147.     Cookie Jar    Die Adresse des Cookie Jars.
  148.     _StdIn        Adresse der aktuellen Eingabe-File-Struktur.
  149.     _StdOut        Adresse der aktuellen Ausgabe-File-Struktur.
  150.     _StdErr        Adresse der aktuellen Fehlerausgabe-File-Struktur.
  151.     _shell_p    Adresse der Shell-Funktion.
  152.  
  153. Diese Adressen sind z.T. nur für den Programmierer der Shell von Bedeu-
  154. tung (z.T nicht mal das). Die Inhalte der Adressen können mit memex ausge-
  155. lesen werden.
  156.  
  157. Siehe auch:    basep
  158.         cookie
  159.         memex
  160.  
  161. -----
  162. alert - GEM-Alertbox erzeugen
  163.  
  164. Syntax: alert Icon Default Boxtext Buttontext [Var]
  165.  
  166. Dieses Kommando macht die GEM-Alert-Boxen von der Shell aus zugänglich. Da
  167. es sich um ein AES-Feature handelt, kann dieses Kommando nur benutzt werden,
  168. wenn vorher gon aktiviert wurde.
  169. Die Parameter haben folgende Bedeutung:
  170.  
  171.     Icon
  172.         das in der Box anzuzeigende Icon. Zulässige Werte sind die
  173.         Strings "none", "excl", "ques" und "stop" sowie die Zahlen
  174.         0 bis 3.
  175.     Default
  176.         die Nummer des Default-Buttons, also des Buttons, der durch
  177.         Druck auf Return angewählt werden kann. Zulässige Werte sind
  178.         1 für den linken, 2 für den mittleren und 3 für den rechten
  179.         Button.
  180.     Boxtext
  181.         der in der Box anzuzeigende Text. Muß in Anführungszeichen
  182.         eingeschlossen sein, wenn er Leerzeichen enthält. Die Zeilen
  183.         müssen durch ^| getrennt sein. (Nur | genügt nicht, wirkt
  184.         als Pipe.)
  185.     Buttontext
  186.         analog dazu die in den Buttons anzuzeigenden Texte, getrennt
  187.         durch ^|.
  188.     Var
  189.         ein beliebiger Variablenname für das Ergebnis.
  190.  
  191. Das Ergebnis der Auswahl, also die Nummer des angwewählten Buttons,  wird als
  192. Rückgabewert des Kommandos und, falls angegeben, in der Variablen Var zurück-
  193. gegeben. Es steht 1 für den linken, 2 für den mittleren und 3 für den rechten
  194. Button.
  195.  
  196. Beispiele:
  197.  
  198.     Die gleiche Wirkung haben:
  199. alert none 1 "Ich bin die Okami-Shell" "Schön"
  200. alert 0 1 "Ich bin die Okami-Shell" Schön
  201.  
  202.     Sicherheitsabfrage:
  203. alert ques 1 "Die Datei $FILE existiert bereits.^|Soll sie gelöscht werden?" ^
  204. "Ja^|Nein" ERG
  205. if [ $ERG = 1 ]
  206. then
  207.   rm $FILE
  208. fi
  209.  
  210. -----
  211. alias - Einfache Shellfunktionen erzeugen
  212.  
  213. Syntax: alias Name String
  214.  
  215. Dieses Kommando ist ein Ersatz für das Alias-Konzept der C-Shell, das von
  216. der Okami-Shell nicht unterstützt wird (da es es in dem Vorbild der Okami-
  217. Shell, der Bourne-Shell, auch nicht gibt). Es dient dazu, Shellscripts aus-
  218. zuführen, die für eine Shell geschrieben wurde, die über alias verfügt
  219. (z.B. die Gulam- oder Mastershell).
  220. Das Alias-Konzept sieht einen Makroprozessor vor, der eine eingegebene
  221. Kommandozeile aufgrund der aliasse expandiert. In der Okami-Shell ist dieses
  222. Konzept überflüssig, da man jedes alias durch eine Shellfunktion darstellen
  223. kann. (Genauso wie man in C jedes Präprozessor-Makro durch eine Funktion er-
  224. setzen kann, aber nicht umgekehrt.)
  225. Das Kommando "alias Name String" ist äquivalent zu:
  226.  
  227.     Name()
  228.     {
  229.       String $*
  230.     }
  231.  
  232. , d.h. es wird eine Shellfunktion mit dem angegebenen Namen erzeugt, die
  233. den angegebenen String zusammen mit dem Rest der Kommandozeile ausführt.
  234.  
  235. Um den absoluten Namen eines externen Kommandos zu speichern, um die Such-
  236. zeit zu verringern (z.B. "alias cc c:/compiler/cc.ttp"), sollte man statt-
  237. dessen lieber das hash-Kommando benutzen ("hash cc c:/compiler/cc.ttp").
  238.  
  239. Beispiele:
  240.  
  241. alias l ls -l        definiert eine Shellfunktion namens l, die sich wie
  242.             ls -l verhält. "l *.c" ist dann also äquivalent zu
  243.             "ls -l *.c".
  244. alias cp !cp -v        sorgt dafür, daß alle Kopieroperationen im Verbose-
  245.             modus ablaufen. Wichtig ist das Ausrufezeichen vor
  246.             cp im Funktionsrumpf, das dafür sorgt, daß hier das
  247.             interne Kommando cp und nicht die Shellfunktion cp
  248.             aufgerufen wird.
  249.  
  250. Es kann nicht garantiert werden, daß sich die mit alias geschaffenen Shell-
  251. funktionen in allen Sonderfällen (Verschachtelungen etc.) genauso verhalten
  252. wie ein alias auf einer Shell, die alias-Expansion durchführt.
  253.  
  254. Siehe auch:    hash
  255.         unalias (unset)
  256.  
  257. -----
  258. backup - Dateien auf Diskette sichern
  259.  
  260. Syntax: backup [-nNrq] [Laufwerk]
  261.  
  262. Dient zum Sichern von Dateien auf Diskette. Es werden von StdIn Datei-
  263. namen eingelesen. Diese Dateien werden auf dem angegebenen Laufwerk oder,
  264. falls kein Laufwerk angegeben ist, nach A:\ gespeichert. Dabei werden alle
  265. benötigten Ordner angelegt.
  266. Alle von StdIn eingelesenen Zeilen werden als Dateinamen betrachtet, mit
  267. der Ausnahme von Zeilen, die mit einem Doppelkreuz (#) beginnen. Diese
  268. werden als Kommentarzeilen betrachtet. Leerzeilen werden ignoriert.
  269. Wenn auf dem Ziellaufwerk kein Platz mehr für weitere Dateien ist, fragt
  270. backup nach der nächsten Diskette. Die Anfrage wird durch Druck auf ENTER
  271. beantwortet; drückt man stattdessen ESC, wird backup abgebrochen.
  272. Die laufende Nummer der jeweiligen Diskette wird im Bootsektor der
  273. Diskette abgelegt (nur bei Disketten, also Laufwerk A: oder B:.)
  274. Nach dem Ende des Backups wird die Anzahl der Dateien, Bytes und benutzter
  275. Disketten ausgegeben.
  276.  
  277. Flags:
  278.     -n    Es werden keine Daten in den Bootsektor geschrieben.
  279.     -N    Es werden keine Daten kopiert. Das ist nützlich, um
  280.         herauszufinden, wieviele Disketten für ein Backup be-
  281.         nötigt werden. Die Disketten müssen in der vorgesehenen
  282.         Reihenfolge eingelegt werden, werden aber nicht beschrieben.
  283.         Impliziert -n.
  284.     -r    Es werden keine Ordner auf dem Ziellaufwerk angelegt, alle
  285.         Dateien landen im Wurzelverzeichnis des Ziellaufwerks.
  286.     -q    Es wird angenommen, daß die erste Diskette bereits im Lauf-
  287.         werk eingelegt ist, daher entfällt die Frage nach dem
  288.         Einlegen der ersten Diskette. Dies ist nützlich, wenn Daten
  289.         statt auf eine Diskette auf eine Festplatte gesichert
  290.         werden.
  291.  
  292.  
  293. Beispiele:
  294.     backup <files.lst
  295.         Aus der Datei files.lst werden Namen von Dateien gelesen,
  296.         die auf Diskette A: gesichert werden. Die Datei files.lst
  297.         kann Kommentarzeilen enthalten, die mit # beginnen.
  298.  
  299.     find d:\ * | backup
  300.         sichert alle Dateien von Partition D: auf Diskette A:.
  301.  
  302.     ls *.c | backup -q e:\backup\source
  303.         sichert alle C-Quelldateien vom aktuellen Directory in
  304.         das Directory e:\backup\source. Da E: keine Diskette
  305.         ist, werden keine Daten in den Bootsektor geschrieben.
  306.         Es erfolgt keine Nachfrage zum Einlegen einer Diskette.
  307.  
  308.     find e:\ *.c | backup -N b:
  309.         findet heraus, wieviele Disketten zum Sichern aller C-
  310.         Quelldateien von Partition E: benötigt würden. Es wird
  311.         Diskettenlaufwerk B: benutzt.
  312.  
  313. Rückgabewert:
  314.     -1    Aufruffehler
  315.     sonst    Anzahl der gesicherten Dateien.
  316.  
  317. -----
  318. basename - Basis-Dateinamen ermitteln
  319.  
  320. Syntax: basename File [Extender]
  321.  
  322. Ausgabe des reinen Dateinamens ohne Laufwerk und Ordner. Wenn ein Extender
  323. angegeben wird und der Dateiname mit diesem Extender endet, wird der Basis-
  324. name ohne diesen Extender ausgegeben. Datei muß es sich nicht unbedingt um
  325. den 3-Zeichen-TOS-Dateitypextender handeln, sondern um eine beliebig lange
  326. Zeichenkette, die vom Ende des Basisnamens abgeschnitten wird.
  327.  
  328. Beispiele:                     ergibt:
  329.     basename d:/shell/sh.ttp         sh.ttp
  330.     basename sh.ttp                sh.ttp
  331.     basename d:/shell/sh.ttp .ttp        sh
  332.     basename d:/compiler iler        comp
  333.  
  334. Anmerkung: Die Arbeitsweise dieses Kommandos hängt in keiner Weise davon ab,
  335. ob die angegebene Datei existiert. Das gilt auch für die Kommandos dirname,
  336. drvname, extname und fullname.
  337.  
  338. Siehe auch: dirname
  339.         drvname
  340.         extname
  341.         fullname
  342.  
  343. -----
  344. basep - Basepage analysieren
  345.  
  346. Syntax: basep [-pa] [Adresse]
  347.  
  348. Mit diesem Kommando kann:
  349. 1) die Adresse der Basepage des Shell-Programms herausgefunden werden,
  350. 2) diese oder eine andere Basepage analysiert werden,
  351. 3) wahlweise stattdessen die Adresse der Parent-Basepage gefunden oder
  352.    diese analysiert werden.
  353.  
  354. Hierbei bedeutet "analysiert", daß die einzelnen in der Basepage enthaltenen
  355. Adressen und sonstigen Angaben ausgegeben werden.
  356.  
  357. Wenn keine Adresse angegeben ist, wird die Basepage des aktuellen Shell-
  358. Prozesses benutzt.
  359.  
  360. Bei der Analyse werden alle Angaben, auch die Längenangaben der einzelnen
  361. Programmsegmente, in hexadezimaler Schreibweise ausgegeben. Das interne
  362. Kommando num kann für die Konvertierung in dezimale Schreibweise benutzt
  363. werden.
  364.  
  365. Flags:
  366.     -a    Wenn dieses Flag angegeben ist, wird die Analyse der Base-
  367.         page ausgegeben. Ansonsten wird nur die Adresse ausgegeben.
  368.     -p    Wenn dieses Flag angegeben ist, wird die Parent-Basepage
  369.         benutzt.
  370.  
  371. Beispiele:
  372. 1) Herausfinden der aktuellen Basepage-Adresse:
  373.     basep
  374.  
  375. 2) wie 1), aber Umformung ins Dezimalsystem:
  376.     basep | xargs num -d
  377.  
  378. 3) Herausfinden der Adresse der Basepage des aufrufenden Programms:
  379.     basep -p
  380.  
  381. 4) Analyse der Basepage an Adresse 0x65A40:
  382.     basep -a 0x65a40
  383.    Diese Adresse kann z.B. von dem Kommando exec oder ps stammen.
  384.  
  385. Siehe auch:    exec
  386.         ps
  387.  
  388. -----
  389. bombs - Erzeugt Bomben
  390.  
  391. Syntax: bombs Anzahl
  392.  
  393. Mit diesem Kommando wird die Shell mit der angegebenen Anzahl von Bomben
  394. beendet. Die Anzahl muß größer oder gleich 2 sein. Es erfolgt ein Sprung
  395. an die Adresse, die in dem entsprechenden Vektor (Adresse 4*Anzahl) ange-
  396. geben ist.
  397. Dieses Kommando kann z.B. benutzt werden, um einen Debugger oder eine Umlen-
  398. kung der Exception-Vektoren zu testen.
  399.  
  400. -----
  401. break - SIEHE while
  402.  
  403. -----
  404. cat - Dateien anzeigen
  405.  
  406. Syntax: cat [-bR] {File}
  407.  
  408. Kopiert Daten von StdIn oder, falls angegeben, von File, nach StdOut.
  409.  
  410. Wenn das Flag -b angegeben ist, werden die Dateien im Binärmodus geöffnet,
  411. es findet also keine Übersetzung von CR/LF-Sequenzen statt. Das ist sinn-
  412. voll, wenn man Binärdateien wie z.B. ausführbare Programmdateien o.ä. an-
  413. einanderhängen will. Damit das funktioniert, sollte man dann aber auch
  414. das Shell-Flag u setzen (siehe "set").
  415.  
  416. Wenn das Flag -R angegeben ist, werden alle Buchstaben um 13 Zeichen ver-
  417. schoben (rot13). Dies ist ein hin und wieder unter Unix benutztes, simples
  418. Verschlüsselungsverfahren, um Dateien auf dem ersten Blick unlesbar zu
  419. machen. Klartext kann mit -R verschlüsselt werden, verschlüsselter Text
  420. wird mit -R wieder zu Klartext. Es sind nur Buchstaben (A...Z und a...z)
  421. betroffen - Ziffern und Sonderzeichen bleiben unverändert.
  422.  
  423. Bsp.:
  424. 1) cat test.dat
  425. gibt den Inhalt der Datei test.dat auf dem Bildschirm aus.
  426.  
  427. 2) cat test.dat >PRT:
  428. druckt die Datei test.dat aus.
  429.  
  430. 3) cat dat.1 dat.2 dat.3 > dat.123
  431. hängt die Dateien dat.1 bis dat.3 aneinander und schreibt das Ergebnis
  432. in die Datei dat.123.
  433.  
  434. 4) set +u
  435.    cat -b test1.prg test2.prg >test.bin
  436. arbeitet im Binärmodus, wodurch keine Übersetzung von CR/LF-Sequenzen in
  437. den Dateien stattfindet.
  438.  
  439. Die Verwendung von "cat >file", um Tastatureingaben in eine Datei zu schrei-
  440. ben, ist nicht möglich, da bei der Eingabe auch das Tastaturecho in die Datei
  441. umgeleitet würde.
  442.  
  443. Siehe auch:    crypt
  444.         raw
  445.  
  446. -----
  447. cd - Wechsel des aktuellen Directories
  448.  
  449. Syntax: cd [Pfad]
  450.  
  451. Setzt das aktuelle Arbeitsverzeichnis auf $HOME oder, falls angegeben,
  452. auf Pfad. Pfad kann erweiterte Wildcards enthalten.
  453. Wenn Pfad nicht mit einem Backslash (\ oder /) beginnt oder ein entsprechendes
  454. Verzeichnis nicht existiert, werden die in der Shellvariablen CDPATH gespei-
  455. cherten Pfade nach einem entsprechenden Verzeichnis durchsucht. Das aktuelle
  456. Arbeitsverzeichnis wird dann auf das erste gefundene Verzeichnis eingestellt.
  457.  
  458. Beispiele:
  459.     cd
  460.         entspricht cd $HOME
  461.     cd e:\okami\test
  462.         Wechsel von Laufwerk und Verzeichnis
  463.     cd test
  464.         Wechsel in den Ordner "test" im aktuellen Verzeichnis
  465.     cd ..
  466.         Wechsel ins Parent-Directory des aktuellen Verzeichnisses
  467.     cd t*
  468.         Wechsel in den ersten Ordner, dessen Name mit t beginnt
  469.  
  470. -----
  471. chmod - Dateiattribute ändern
  472.  
  473. Syntax: chmod [(+|-)cdrhsvf] File
  474.  
  475. Flags: Bei Verwendung von + wird das entsprechende Flags gesetzt, bei
  476.        Verwendung von - wird es geloescht. Die Flags bedeuten:
  477.     c    File written and closed (Archivstatus)
  478.     d    Directory        (Ordner)
  479.     r    Read-Only        (nur lesen)
  480.     h    Hidden            (unsichtbar; nur für Dateien)
  481.     s    System File        (Systemdatei)
  482.     v    Volume Lable        (Diskettenname)
  483.     f    Fastload        (Fastload-Bit des Programmheaders,
  484.                      nur für ausführbare Programmdateien)
  485.  
  486. Die Flags können beliebig kombiniert werden, allerdings geben nicht alle
  487. Kombinationen einen Sinn. Das Betriebssystem verbietet gewisse Kombinationen
  488. wie z.B. das Verstecken von Ordnern.
  489.  
  490. Das Flag f betrifft das Fastload-Bit im Programmheader. Es kann nur für
  491. ausführbare Programmdateien benutzt werden (eine Datei gilt als soche, wenn
  492. ihr erstes Wort 0x60a ist), bei anderen Dateien erscheint eine Fehlermeldung.
  493. Das Fastload-Bit bewirkt, daß nach dem Laden des Programms nicht der gesamte
  494. Speicher, sondern nur das BSS-Segment gelöscht wird.
  495.  
  496. Wenn eine Datei einmal das Volume Label-Flag hat, kann dieses nicht mehr
  497. entfernt werden, da die Datei dadurch von der normalen Dateisuche
  498. (Fsfirst/next) ausgeschlossen ist.
  499.  
  500. Das Einstellen der Ausführbarkeit ist (anders als in Unix) mit chmod nicht
  501. möglich, da hierfür der Dateinamen-Extender verantwortlich ist.
  502.  
  503. Die Einstellung der Attribute einer Datei kann mit ls -lf angesehen werden.
  504.  
  505. -----
  506. clipb - Initialisierung des GEM-Clipboards
  507.  
  508. Syntax: clipb [Pfad]
  509.  
  510. Das Clipboard (oder Scrap-Directory) ist eine Einrichtung des Betriebssystems,
  511. das die temporäre Datenablage und den Datenaustausch zwischen mehreren Pro-
  512. grammen unterstützen soll. Es besteht aus nichts weiter als einem Directory,
  513. dessen Name vom AES gespeichert wird. Programme, die das Clipboard benutzen,
  514. müssen sich diesen Namen vom AES mitteilen lassen und können, wenn sie sich
  515. an einige Konventionen halten, mühelos mit anderen Programmen Dateien aus-
  516. tauschen.
  517.  
  518. Die Okami-Shell unterstützt das Clipboard auf folgende Weise:
  519.  
  520. 1) Nach Programmstart wird die Shell-Variable CLIPDIR mit dem Wert
  521.    "X:\scrapdir\scrap.*" initialisiert, wobei X: das Bootlaufwerk ist. Das
  522.    Atari-Profibuch schlägt diesen Pfad als Clipboard vor. Dies hat noch nichts
  523.    mit AES zu tun, da AES zu diesem Zeitpunkt noch gar nicht initialisiert ist.
  524. 2) Wenn die Shell mit dem Kommando gon bei AES angemeldet wird, wird der
  525.    tatsächliche Clipboard-Pfad ermittelt und, falls vorhanden, in CLIPDIR ab-
  526.    gelegt. Wenn noch kein Clipboard-Pfad definiert worden ist, wird der
  527.    Inhalt von CLIPDIR als solcher festgelegt.
  528. 3) Das Kommando clipb legt (falls vorhanden) seinen Parameter in CLIPDIR
  529.    ab ("clipb c:/scrap/*" beinhaltet also "CLIPDIR=c:/scrap/*"). Falls gon
  530.    aktiv ist, wird danach der (ggfs. neue) Wert von CLIPDIR dem AES als
  531.    Clipboard-Directory mitgeteilt. Außerdem wird der zugehörige Pfad an-
  532.    gelegt.
  533.  
  534. Eine korrekte Initialisierung des Clipboards sieht also so aus:
  535.  
  536.     gon
  537.     clipb
  538.  
  539. oder, wenn man den Pfad ändern will:
  540.  
  541.     gon
  542.     clipb g:/scrap/scrap.*
  543.  
  544. Diese Zeilen sollte man in sein Profile setzen, wenn man Programme benutzen
  545. will, die das Clipboard verwenden.
  546. Shellscripts können das Clipboard ebenfalls einsetzen, indem sie dessen Pfad
  547. der Shell-Variablen CLIPDIR entnehmen.
  548. Achtung: zu dem Clipboard-Pfad gehört nicht nur der Name des Ordners, sondern
  549. auch der Name der zu benutzenden Dateien (scrap.*)!
  550.  
  551. Dieses Kommando benutzt keine Standard-Ein- oder Ausgabe.
  552.  
  553. Siehe auch:    gon
  554.  
  555. -----
  556. cls - Bildschirm initialisieren
  557.  
  558. Syntax: cls
  559.  
  560. Löscht den Bildschirm, setzt den Cursor auf die erste Spalte in der
  561. ersten Zeile und schaltet den Cursor auf sichtbar. Außerdem wird das
  562. Word Wrap angeschaltet, das dafür sorgt, daß Ausgaben, die länger als
  563. eine Zeile sind, auf mehrere Zeilen verteilt werden.
  564.  
  565. -----
  566. cmds - Ausgabe der internen Kommandos
  567.  
  568. Syntax: cmds [-Ca] {Pattern}
  569.  
  570. Es werden die Namen aller interner Kommandos ausgegeben, die auf die ange-
  571. gebenen Patterns passen. Dabei gelten die Regeln der erweiterten Wildcards
  572. (siehe okami.doc). Wenn kein Pattern angegeben ist, werden alle internen
  573. Kommandos ausgegeben.
  574.  
  575. Flags:
  576.     -C    Die Kommandos werden in mehreren Spalten ausgegeben. Auf diese
  577.         Weise passen alle Kommandos auf einmal auf den Bildschirm.
  578.     -a    Es werden außerdem die Startadressen der jeweiligen
  579.         Funktionen ausgegeben (ja, für den Anwender ist das
  580.         VÖLLIG uninteressant)
  581.  
  582. Beispiele:
  583.     cmds        Ausgabe aller interner Kommandos
  584.     cmds -a t*    Ausgabe aller Komandos, die mit t beginnen, sowie
  585.             die Startadressen.
  586.     cmds [abcd]*e    Ausgabe aller Kommandos, die mit a,b,c oder d beginnen
  587.             und mit e aufhören.
  588.     cmds | wc -l    Ausgabe der Anzahl der internen Kommandos.
  589.  
  590. Rückgabewert: Es wird die Anzahl der ausgegebenen Kommandos zurückgegeben.
  591.  
  592. -----
  593. continue - SIEHE while
  594.  
  595. -----
  596. cookie - Auslesen des Cookie-Jars
  597.  
  598. Syntax: cookie [-xdn0sc] {cookie}
  599.  
  600. Mit diesem Kommando kann der Cookie-Jar des Betriebssystems ausgelesen werden.
  601. Der Cookie-Jar wird erst ab TOS 1.6 vom Betriebssystem selber genutzt, kann
  602. aber (was die Okami-Shell tut) in allen früheren TOS-Versionen einfach in-
  603. stalliert werden.
  604. In dem Cookie-Jar können sich Programme mit einer Namenskennung und einer
  605. Versionsnummer eintragen. Die Kennung ist genau 4 Bytes lang, belegt also ge-
  606. nau wie die Versionsnummer ein Langwort (32 bit). Die Kennung der Okami-Shell
  607. ist "OkSh", die Versionsnummer enthält bei Version 1.3 eine 1 im oberen und
  608. eine 3 im unteren Byte des ersten Wortes (ist also 0x103).
  609.  
  610. Es werden alle Cookies ausgegeben, die auf die angeführten Parameter passen,
  611. wobei dieselben Regeln wie für die erweiterten Wildcards gelten (siehe 
  612. okami.doc). Wenn keine Parameter angegeben sind, lautet die Defaulteinstellung
  613. "*", es werden also alle Cookies ausgegeben.
  614.  
  615. Der Rückgabewert ist die Anzahl der so gefundenen Cookies. Das Kommando kann
  616. dadurch benutzt werden, um das Vorhandensein eines bestimmten Cookies nachzu-
  617. prüfen.
  618.  
  619. Flags:
  620.     -x    Die Versionsnummer wird hexadezimal ausgegeben.
  621.     -d    Die Versionsnummer wird dezimal ausgegeben.
  622.     -n    Die Versionsnummer wird in der Form x.y ausgegeben, wobei
  623.         x das obere und y das untere Byte des ersten Wortes darstellt.
  624.         x und y    werden dabei dezimal ausgegeben.
  625.         Dies ist die Default-Einstellung, wenn keine anderen Flags
  626.         angegeben sind.
  627.     -0    Es erfolgt keine Ausgabe. Ist nützlich beim Testen auf vor-
  628.         handene Cookies, siehe untenstehendes Beispiel.
  629.     -s    Es wird außerdem eine Statistikangabe über freie und belegte
  630.         Plätze im Cookie-Jar ausgegeben.
  631.     -c    Wenn dieses Flag angegeben ist, wird ein neuer Cookiejar ange-
  632.         legt, in den die Shell sich einträgt. Dabei wird ein evtl.
  633.         vorhandener Cookiejar überschrieben. Man sollte dieses Flag
  634.         nur benutzen, wenn der Verdacht besteht, daß eine unzulässige
  635.         Adresse als Basisadresse des Cookiejar eingetragen ist (z.B.
  636.         von einem weggebombtem Programm, das keine Zeit mehr hatte,
  637.         die Adresse zu entfernen).
  638.         Dieses Flag sollte nur in Notfällen angewandt werden. Wenn
  639.         ein früheres Programm, von dem aus die Shell gestartet wurde,
  640.         einen Cookiejar anlegt und mit cookie -c diese Adresse ver-
  641.         ändert wird, das Programm das aber nicht bemerkt, kann das
  642.         zum Absturz dieses Programmes führen, wenn es versucht, den
  643.         betreffenden Speicherbereich wieder freizugeben. (Die Okami-
  644.         Shell ist gegen solche Vorfälle geschützt.)
  645.  
  646. Es kann nur eins der Flags x, d, n angegeben werden. Wenn mehrere dieser Flags
  647. angegeben sind, gilt nur das zuerst stehende.
  648.  
  649. Beispiele:
  650.     cookie
  651.                 Ausgabe aller installierten Einträge.
  652.     cookie -s [A-Z]*
  653.                 Ausgabe aller Einträge, die mit einem Groß-
  654.                 buchstaben beginnen. Außerdem wird die Sta-
  655.                 tistik ausgegeben.
  656.     cookie -x OkSh
  657.                 Ausgabe des Okami-Cookies in hexadezimal.
  658.     if cookie -0 MiNT
  659.     then
  660.       echo MiNT ist installiert.
  661.     else
  662.       echo MiNT ist nicht installiert.
  663.     fi
  664.                 Findet heraus, ob Mint installiert ist. Das
  665.                 cookie-Kommando erzeugt in dieser Form keine
  666.                 Ausgabe.
  667.  
  668. Rückgabewert: -2, wenn kein Cookie-Jar installiert ist (was nicht geschehen
  669. dürfte), -1 bei einem Syntaxfehler, sonst die Anzahl der gefundenen Cookies.
  670. Wenn -0 angegeben ist, wird, wenn kein Cookie-Jar installiert ist (was hin
  671. und wieder doch geschieht), 0 zurückgegeben.
  672.  
  673. Die Basisadresse des aktuellen Cookie-Jars kann mit dem Kommando "adr" er-
  674. mittelt werden.
  675.  
  676. -----
  677. cp - Dateien kopieren
  678.  
  679. Syntax: cp [-acCvifq] Source {Source} Dest
  680.  
  681. Wenn Dest der Name eines existierenden Ordners ist, werden alle Dateien
  682. Source in diesen Ordner kopiert. Der Dateiname der Kopien ist dann
  683. Dest/`basename Source`.
  684. Wenn Dest nicht der Name eines existierenden Ordners ist, wird die Datei
  685. Source in die Datei Dest kopiert. In diesem Fall darf nur ein Source an-
  686. gegeben sein.
  687. Die Source-Angaben dürfen erweiterte Wildcards enthalten. Die Maximalanzahl
  688. der auf diese Weise benutzbaren Source-Dateien ist 100. Es dürfen keine
  689. Ordner als Source angegeben werden.
  690.  
  691. Flags:
  692.     -a    Die Quelldatei wird an die Zieldatei angehängt.
  693.     -c    Es werden nur Dateien kopiert, bei denen das Archiv-
  694.         Bit gesetzt ist.
  695.     -C    Nach dem Kopieren wird in der Quelldatei das Archivbit
  696.         gelöscht.
  697.     -v    Bei jeder kopierten Datei wird eine Meldung ausgegeben. Das
  698.         ist nützlich beim Kopieren von vielen Dateien auf einmal.
  699.     -i    Fragt vor dem Überschreiben bereits vorhandener Zieldateien
  700.         nach, ob diese überschrieben werden dürfen.
  701.     -f    Überschreibt keine bereits vorhandenen Dateien.
  702.     -q    Es erfolgen keine Ausgaben außer Syntaxfehlermeldungen und
  703.         Informationen über fehlenden Speicherplatz (also keine
  704.         Meldungen wegen bereits vorhandener Zieldatei, nicht ge-
  705.         setztem Archivbit etc.)
  706.  
  707.  
  708. Beispiele:
  709. cp sh.ttp sh.prg        Kopieren einer Datei.
  710. cp sh.ttp d:/shell        Kopieren einer Datei in einen Ordner, erzeugt
  711.                 wird d:/shell/sh.ttp.
  712. cp e:/source/*.c a:/        Kopieren aller C-Dateien auf die Diskette.
  713. cp -f e:/source/*.c a:/        dito, aber bereits vorhandene Dateien werden
  714.                 nicht überschrieben.
  715. cp -a file1 file2        wesentlich schneller als `cat file1 >>file2'
  716. cp -cC e:/txt/* a:/        Backup aller Dateien von e:/txt nach A:
  717.  
  718. -----
  719. crypt - Daten ver- und entschlüsseln
  720.  
  721. Syntax: crypt Schlüssel
  722.  
  723. crypt liest Daten von StdIn, verschlüsselt sie mit dem angegebenen Schlüssel
  724. und schreibt das Ergebnis nach StdOut.
  725. Durch erneutes Verschlüsseln werden die Daten wieder entschlüsselt.
  726.  
  727. Benutzt wird der Verschlüsselungsalgorithmus von MicroEmacs, was bedeutet, daß
  728. die Verschlüsselung kompatibel ist zu allen MicroEmacs-Versionen auf allen
  729. Rechnern. Die in der Okami-Shell verwendete Verschlüsselungsroutine stammt
  730. aus den Quellen von MicroEmacs 3.9+.
  731.  
  732. Der Verschlüsselungsalgorithmus ist so angelegt, daß druckbare Ascii-Zeichen
  733. wieder in solche verschlüsselt werden. Steuerzeichen (Ascii<32 oder >127)
  734. werden nicht verändert. Dadurch ist die Verschlüsselung einer reinen Ascii-
  735. Datei wieder eine reine Ascii-Datei.
  736.  
  737. Eine wesentlich simplere (und weniger sichere) Verschlüsselung bietet
  738. das Kommando cat mit der Option -R, nämlich die rot13-Verschlüsselung.
  739.  
  740. Beispiele:
  741.     crypt xyz <secret.txt >secret.crp
  742.         verschlüsselt die Datei secret.txt und speichert das Ergebnis
  743.         in der Datei secret.crp. Es wird der Schlüssel "xyz" benutzt.
  744.     crypt xyz <secret.crp
  745.         entschlüsselt secret.crp und gibt das Ergebnis auf dem Bild-
  746.         schirm aus.
  747.     crypt abc <secret.txt | crypt abc
  748.         hat dieselbe Wirkung wie "cat secret.txt".
  749.     ls -la *.c | crypt dubidu | hd
  750.         erzeugt eine Dateiliste, verschlüsselt sie mit dem Schlüssel
  751.         "dubidu" und fertigt von dem Ergebnis ein Hexdump an.
  752.     crypt abc secret.txt
  753.         verschlüsselt die Tastatureingabe anhand des Schlüssels
  754.         "abc secret.txt".
  755.  
  756. -----
  757. cursor - Konfiguration des VT52-Cursors
  758.  
  759. Syntax: cursor [(+|-)bv] [Rate]
  760.  
  761. Beim Aufruf ohne Parameter wird die aktuelle Blinkrate nach StdOut ge-
  762. schrieben.
  763. Wenn Rate angegeben wird, wird die Blinkrate auf Rate gesetzt. Werte für
  764. Rate: 30 normal, <30: schneller, >30: langsamer, 0: nicht blinkend.
  765. Flags: +v    der Cursor wird sichtbar.
  766.        -v    der Cursor wird unsichtbar.
  767.        +b    der Cursor wird blinkend.
  768.        -b    der Cursor hört auf zu blinken (unabhängig von Rate).
  769.  
  770. Beispiel:
  771. Der Cursor soll während der Ausführung eines Programms schneller blinken
  772. und dann auf den alten Wert zurückgestellt werden.
  773.  
  774.     ALT=`cursor`
  775.     cursor 5
  776.     .....................    (das auszuführende Programm)
  777.     cursor $ALT
  778.     unset ALT
  779.  
  780. Rückgabewert: der Ascii-Code des ersten eingegebenen Zeichens.
  781.  
  782. Siehe auch:    keyb
  783.         mouse
  784.         scr
  785.  
  786. -----
  787. dark - Bildschirm dunkelschalten
  788.  
  789. Syntax: dark
  790.  
  791. Hat dieselbe Wirkung wie ein Druck auf Control-A in der Tastatureingabe
  792. (siehe okami.doc). Der Sinn dieses Kommandos ist, daß man von Programmen
  793. aus, die Shellaufrufe über den _shell_p-Zeiger ermöglichen, den Bildschirm
  794. auf Kommando dunkelschalten kann.
  795.  
  796. -----
  797. date - Ausgabe der Systemzeit
  798.  
  799. Syntax: date [+Fmt]
  800.  
  801. Datum und Uhrzeit werden nach StdOut geschrieben.
  802. Wenn ein mit einem Pluszeichen eingeleiteter Formatstring angegeben ist,
  803. wird das Datum in dem angegebenen Format ausgegeben. In dem Formatstring
  804. können Formatelemente enthalten sein, die folgendes bedeuten:
  805.  
  806.     %d    Nummer des Tages im Monat (00...31)
  807.     %h    Abkürzung des Monatsnamens (Jan...Dec)
  808.     %H    Stunde (00...23)
  809.     %m    Nummer des Monats (00...12)
  810.     %M    Minute (00.59)
  811.     %n    erzeugt einen Zeilenvorschub
  812.     %S    Sekunde (00...59)
  813.     %t    erzeugt einen Tabulatorvorschub
  814.     %y    Jahr zweistellig (00...99)
  815.     %Y    Jahr vierstellig (1900...????)
  816.     %%    erzeugt ein Prozentzeichen
  817.  
  818. Alle anderen Zeichen werden direkt ausgegeben.
  819.  
  820. Wenn kein Formatstring angegeben ist, lautet die Voreinstellung:
  821.     date +%d.%m.%Y %H:%M:%S
  822.  
  823. Beispiele:
  824.     Eingabe...            Ausgabe... (z.B.)
  825.     date                06.09.1990 21:38:07
  826.     date +Das Jahr ist %Y        Das Jahr ist 1990
  827.     date +%h. %dth, %Y        Sep. 06th, 1990
  828.     date +Hallo, wie gehts        Hallo, wie gehts
  829.  
  830. -----
  831. dial - Telefonnummern über das Modem wählen
  832.  
  833. Syntax:    dial [-q|-f [Dateiname]|{Nummer|Kürzel|-d}]
  834.  
  835. Dieses Kommando ist für Besitzer von Modems interessant, an denen ein Telefon
  836. angeschlossen werden kann. Man kann Telefonnummern vom Rechner aus über das
  837. Modem wählen lassen und dann normal telefonieren. Das dial-Kommando erweitert
  838. das vorhandene Telefon um Rufnummernverzeichnis, Tastatur, Display und
  839. Wahlwiederholung.
  840.  
  841. Wenn kein Parameter angegeben ist, wird die beim letzten Aufruf angegebene
  842. Nummer noch einmal gewählt.
  843.  
  844. Wenn der Parameter -q angegeben ist, wird die beim letzten Aufruf angegebene
  845. Nummer ausgegeben.
  846.  
  847. Wenn der Parameter -f, gefolgt von einem Dateinamen, angegeben ist, wird die
  848. angegebene Datei als Rufnummerndatei geladen. Wenn -f ohne Dateinamen ange-
  849. geben ist, wird eine evtl. residente Rufnummerndatei aus dem Speicher ent-
  850. fernt.
  851.  
  852. Achtung: wenn eins der Flags -f oder -q benutzt wird, so dürfen keine anderen
  853. Flags oder Parameter benutzt werden.
  854.  
  855. Alle anderen Parameter werden als Nummern oder Kürzel betrachtet. Als Nummer
  856. gilt alles, was mit einer Ziffer beginnt, als Kürzel gilt alles andere. Ein
  857. Underscore als Kürzel steht für die beim letzten Aufruf angegebene Nummer.
  858. Wenn dabei das Flag -d angegeben ist, wird die Nummer nur ausgegeben und
  859. nicht gewählt.
  860.  
  861. Die Kürzel werden anhand einer Rufnummerndatei interpretiert. Diese Datei wird
  862. bei ihrer ersten Benutzung in den Speicher geladen und resident gehalten, bis
  863. mit -f eine andere Datei gewählt oder die Shell beendet wird. Der Default-
  864. Dateiname ist $ETC/dial.inf .
  865.  
  866. Die einzelnen Zeilen der Rufnummerndatei enthalten jeweils ein Kürzel und eine
  867. Nummer. Kürzel und Nummer müssen durch mindestens ein Whitespace-Zeichen 
  868. (Space, Tab...) getrennt sein. Groß/Kleinschreibung ist ohne Bedeutung. Alle
  869. nicht-Ziffern in der Nummer werden ignoriert. Zeilen, die mit einem Doppel-
  870. kreuz beginnen, sowie Leerzeilen gelten als Kommentarzeilen. Whitespace-
  871. Zeichen am Anfang und Ende der Zeilen werden ebenfalls ignoriert.
  872.  
  873. Die Nummer wird gewählt, indem folgende Zeichenketten nacheinander an die
  874. serielle Schnittstelle geschickt werden:
  875.  
  876.     1) der Inhalt der Shellvariablen DIALPREFIX oder, wenn diese
  877.        Variable nicht gesetzt ist, die Zeichenkette "ATD",
  878.     2) alle Ziffern der gewählten Nummer,
  879.     3) ein CR-Zeichen.
  880.  
  881. Der Anwender hat selber dafür zu sorgen, daß an der Schnittstelle ein Modem
  882. angeschlossen ist und daß die Schnittstelle korrekt initialisiert und
  883. konfiguriert ist.
  884.  
  885. Wenn bei der Expansion der Kürzel ein Fehler auftritt, weil die Rufnummern-
  886. datei nicht geöffnet werden kann oder ein unbekanntes Kürzel auftritt, wird
  887. das Kommando nicht abgebrochen, sondern es wird das fehlerhafte Kürzel ig-
  888. noriert.
  889.  
  890. Beispiele:
  891.  
  892. Auszug aus einer Rufnummerndatei:
  893.  
  894.     # Vorwahlen
  895.     Aachen        0241
  896.     Köln        0221
  897.     München        089
  898.     # Nummern
  899.     W.Rösler    534596
  900.     Zeit        1191
  901.  
  902. dial 534596
  903.             die angegebene Nummer wird gewählt.
  904. dial 0241 _
  905.             die letzte Nummer wird mit einer Vorwahl versehen.
  906.             Anstelle des Underscores tritt die zuletzt gewählte
  907.             Nummer.
  908. dial 0241 534596
  909.             mit Vorwahl.
  910. dial 0241534596
  911.             hat dieselbe Wirkung.
  912. dial 0241-53.45.96
  913.             ebenso. Nicht-Ziffern werden ignoriert.
  914. dial Aachen 123456
  915.             die Vorwahl von Aachen wird aus der Rufnummerndatei
  916.             geholt.
  917. dial Aachen W.Rösler
  918.             Vorwahl und Nummer werden aus der Datei geholt.
  919. dial aachen w.rösler
  920.             ebenso. Groß/Kleinschreibung ist ohne Bedeutung.
  921. dial -d Köln 121.345.4-5
  922.             die Nummer wird zusammengebaut und ausgegeben, aber
  923.             nicht gewählt (-d).
  924. dial -f mydial
  925.             die Datei mydial wird als Rufnummerndatei geladen. Es
  926.             wird nichts gewählt.
  927. dial -f
  928.             eine evtl. residente Rufnummerndatei wird aus dem
  929.             Speicher entfernt.
  930. DIALPREFIX=ATDT
  931.             Einstellen eines anderen Präfixes für die zum Modem
  932.             zu schickende Steuersequenz.
  933. dial
  934.             die letzte Nummer wird noch einmal gewählt.
  935. dial -q
  936.             die letzte Nummer wird ausgegeben. Es wird nichts
  937.             gewählt.
  938.  
  939. Siehe auch:    rsconf
  940.  
  941. -----
  942. df - Belegung der Massespeicher anzeigen
  943.  
  944. Syntax: df [-dnmbf] {Drive}
  945.  
  946. Gibt Informationen über freie und belegte Bytes und Cluster auf allen
  947. angemeldeten Laufwerken oder, wenn Drive angegeben ist, nur von Laufwerk
  948. Drive. Nur der erste Buchstabe von Drive ist relevant, d.h. für Informa-
  949. tionen über Laufwerk A: genügt: df a
  950.  
  951. Flag:    -d    Es werden für jedes Laufwerk folgende Daten ausgegeben:
  952.             Anzahl der Cluster,
  953.             Anzahl der Sektoren pro Cluster,
  954.             Anzahl der Bytes pro Sektor,
  955.             Anzahl der freien Cluster.
  956.         Dies entspricht der Rückgabe der Gemdos-Funktion Dfree.
  957.     -n    Es wird keine Überschrift ausgegeben. Wenn -n zusammen
  958.         mit -m angegeben wird, werden die mit `rdti' oder `drives'
  959.         eingestellten Laufwerksbezeichnungen nicht ausgegeben.
  960.     -m    Es wird eine Liste der angeschlossenen Laufwerke ausge-
  961.         geben. -d ist ohne Wirkung. Es werden die mit `rdti'
  962.         oder `drives' eingestellten Laufwerksbezeichnungen aus-
  963.         gegeben, außer wenn -n angegeben ist.
  964.     -b    Wenn nur ein Laufwerk angeschlossen ist, das sowohl als
  965.         A: als auch als B: angesprochen werden kann, werden, wenn
  966.         dieses Flag angegeben ist, bei der Übersicht (auch bei -m)
  967.         die Angaben von A: und von B: ausgegeben (wenn -m nicht
  968.         angegeben ist, ist also ein Diskettenwechsel nötig). Wenn
  969.         -b nicht angegeben ist, werden, wenn nur ein Disketten-
  970.         laufwerk vorhanden ist, keine Angaben über Laufwerk B:
  971.         ausgegeben (auch nicht bei -m).
  972.     -f    Es wird nur die Anzahl der freien Bytes nach StdOut ge-
  973.         schrieben. Mit dieser Option kann z.B. ein Shellscript
  974.         feststellen, ob auf einer Diskette genügend Platz vorhanden
  975.         ist.
  976.  
  977. Rückgabewert: (nur für df -m)
  978.     -1    Aufruffehler.
  979.     sonst    Anzahl der ausgegebenen Laufwerke.
  980.  
  981. Siehe auch:    du
  982.  
  983. -----
  984. dirname - Pfad ermitteln
  985.  
  986. Syntax: dirname file
  987.  
  988. Es wird der Pfad der Datei ausgegeben.
  989. Bsp: dirname a:\okami\sh.ttp ergibt a:\okami.
  990.  
  991. Siehe auch: basename
  992.         drvname
  993.         extname
  994.         fullname
  995.  
  996. -----
  997. do - SIEHE while
  998.  
  999. -----
  1000. done - SIEHE while
  1001.  
  1002. -----
  1003. drive - Laufwerksbezeichnungen festlegen und auslesen
  1004.  
  1005. Syntax: drive ["Drive {Drive}" [String]]
  1006.  
  1007. Mit diesem Kommando kann jedem Laufwerk eine Bezeichnung zugeordnet werden.
  1008. Diese Bezeichnung wird z.B. von dem internen Kommando df ausgegeben.
  1009. Wenn keine Parameter angegeben sind, werden alle vorhandenen Bezeichnungen
  1010. ausgegeben.
  1011. Wenn nur ein Parameter (d.h. ein einziges Wort, ggfs. in doppelten Anführungs-
  1012. zeichen) angegeben ist, so wird jeder Buchstabe dieses Wortes als Laufwerk be-
  1013. trachtet und die Bezeichnung dieses Laufwerks ausgegeben. Zeichen außer A bis
  1014. Z und a bis z werden dabei ignoriert.
  1015. Wenn ein String ausgegeben ist, wird dieser jedem der angegebenen Lauf-
  1016. werke als Laufwerksbezeichnung zugeordnet.
  1017.  
  1018. Beispiele:
  1019. 1) Ausgabe aller Laufwerksbezeichnungen:
  1020.     drive
  1021.  
  1022. 2) Ausgabe der Bezeichnung von Laufwerk A:
  1023.     drive A:
  1024.    oder
  1025.     drive a
  1026.  
  1027. 3) Ausgabe der Bezeichnungen der Laufwerke A,C und G:
  1028.     drive acg
  1029.    oder
  1030.        drive "A: C: G:"
  1031.  
  1032. 4) Setzen der Bezeichnung "Diskette" für Laufwerk A:
  1033.     drive a Diskette
  1034.  
  1035. 5) Setzen der Bezeichnung "Platte" für Laufwerke C bis F:
  1036.     drive cdef Platte
  1037.    oder
  1038.     drive "C D E F" Platte
  1039.    aber nicht
  1040.        drive C D E F Platte
  1041.  
  1042. Eine weitere Möglichkeit, die Laufwerksbezeichnungen zu initialisieren,
  1043. ist das interne Kommando rdti, das die Bezeichnungen direkt aus der
  1044. desktop.inf-Datei lädt.
  1045.  
  1046. -----
  1047. drvname - Laufwerk ermitteln
  1048.  
  1049. Syntax: drvname file
  1050.  
  1051. Es wird der Name des Gerätes von file ausgegeben.
  1052. Bsp: drvname a:\okami\sh.ttp ergibt a:.
  1053.  
  1054. Siehe auch: basename
  1055.         dirname
  1056.         extname
  1057.         fullname
  1058.  
  1059. -----
  1060. du - Platten-Platzbedarf ermitteln
  1061.  
  1062. Syntax: du [-brft] {Directory}
  1063.  
  1064. du ermittelt zu jedem der angegebenen Directories den Bedarf an Platten-
  1065. speicherplatz. Das ist die Summe aus den Längen aller in den Directories
  1066. enthaltenen Dateien plus der Platzbedarf aller enthaltenen Subdirectories.
  1067. Außerdem dient du zur baumartigen Darstellung der Ordnerhierarchie.
  1068. Die Ausgabe von du erfolgt in Clustern. Ein Cluster entspricht i.d.R.
  1069. einem Kilobyte auf der Platte, die tatsächliche Größe wird aus dem Bios-
  1070. Parameterblock ermittelt. Der Platzbedarf einer Datei entspricht der Anzahl
  1071. der benötigten Cluster, ist also i.d.R. größer als die Dateilänge.
  1072. Wenn keine Parameter angegeben sind, lautet die Defaulteinstellung "-r .".
  1073. Wenn kein Directory angegeben ist, wird das aktuelle Directory benutzt.
  1074.     
  1075. Flags:
  1076.     -b    Es wird nicht der Platzbedarf in Clustern, sondern die
  1077.         Dateilänge in Bytes errechnet und ausgegeben.
  1078.     -r    Es wird nur der Platzbedarf der angegebenen Directories
  1079.         ausgegeben. Wenn dieses Flag nicht angegeben ist, wird auch
  1080.         der Platzbedarf aller enthaltenen Subdirectories ausgegeben.
  1081.     -f    Es wird zusätzlich der Platzbedarf aller enthaltenen Dateien
  1082.         ausgegeben. Wenn dieses Flag nicht angegeben ist, wird nur
  1083.         der Platzbedarf von Directories ausgegeben.
  1084.         Wenn -t angegeben ist, hat dieses Flag die umgekehrte Wirkung:
  1085.         es werden dann keine Dateien, sondern nur Directories ausge-
  1086.         geben. Dies ist nützlich für einen schnellen Überblick über
  1087.         die Ordnerstruktur.
  1088.     -t    erzeugt eine baumartige Ausgabe der Ordnerstruktur. Die Flags
  1089.         -b und -r sind ohne Wirkung.
  1090.  
  1091. Beispiele:
  1092.  
  1093. du /okami    ergibt: (Angaben in Cluster)
  1094.         1        bin
  1095.         615      doc
  1096.         74       ok_demo\doc
  1097.         125      ok_demo
  1098.         2000     \okami
  1099.  
  1100. du -b /okami    ergibt: (Angaben in Bytes)
  1101.         292      bin
  1102.         617210    doc
  1103.         73148    ok_demo\doc
  1104.         121683    ok_demo
  1105.         1978543    \okami
  1106.  
  1107. du -r /okami    ergibt: (nur das angegebene Directory)
  1108.         2000     e:\okami
  1109.  
  1110. du -f /okami    ergibt: (Ausgabe mit allen Dateien) (Ausschnitt)
  1111.         36       cmds2.c
  1112.         27       utl4.c
  1113.         48       sh.c
  1114.         1        bin\ship.exe
  1115.         1        bin
  1116.         2000     \okami
  1117.  
  1118. du -t /okami    ergibt: (Ausgabe als Baum mit Dateien) (Ausschnitt)
  1119.         okami\
  1120.             cmds2.c
  1121.             utl4.c
  1122.             sh.c
  1123.             bin\
  1124.                 ship.exe
  1125. du -tf /okami    ergibt: (dito ohne Dateien)
  1126.         okami\
  1127.             bin\
  1128.             doc\
  1129.             ok_demo\
  1130.                 doc\
  1131.  
  1132. Siehe auch:    df
  1133.  
  1134. -----
  1135. echo - Zeichenketten ausgeben
  1136.  
  1137. Syntax: echo String
  1138.  
  1139. Schreibt String nach StdOut. String kann leer sein, d.h. echo ohne Para-
  1140. meter schreibt eine Leerzeile nach StdOut.
  1141. In dem String sind folgende Sonderzeichen erlaubt:
  1142. ^n    erzeugt ein Newline-Zeichen (in C: '\n')
  1143. ^t    erzeugt ein Tabulator-Zeichen (in C: '\t')
  1144. ^ooo    wobei ooo eine dreistellige Oktalzahl ist: erzeugt das Zeichen
  1145.     mit dem Ascii-Code ooo.
  1146.     Beipiel: echo ^033pHallo^033q schreibt Hallo in invertierter Schrift.
  1147. ^;    erzeugt ein Semikolon, das nicht als Trenner von Kommandos wirkt.
  1148.     Siehe unten.
  1149. ^>
  1150. ^<
  1151. ^|
  1152. ^`    erzeugen analog dazu Größer-, Kleiner-, Pipe- und Accent Grave-Zei-
  1153.     chen, die nicht    die Ein/Ausgabeumleitung bzw. Command Substitution
  1154.     bewirken.
  1155. ^c    am Ende des Strings verhindert den Zeilenvorschub, d.h. der Cursor
  1156.     bleibt am Ende der Zeile.
  1157. ^x    wobei x ein beliebiges Zeichen ausser n, t, c, 0..7 ist: erzeugt
  1158.     das Zeichen x. Dies ist nuetzlich zum Beenden von Variablenauf-
  1159.     rufen. Beispiel:
  1160.  
  1161.     VAR=Halli
  1162.     echo $VARHallo        gibt den Wert der Variable VARHallo aus
  1163.     echo $VAR^Hallo     gibt die Ausgabe HalliHallo.
  1164.  
  1165. ^^    erzeugt ein Hoch-Zeichen.
  1166.  
  1167. Achtung: Whitespace-Zeichen wie ^t und ^n müssen in doppelten Anführungs-
  1168. zeichen (") stehen, um wirksam zu werden.
  1169.  
  1170. Diese Sonderzeichen gelten nicht nur bei der Angabe von Parametern des echo-
  1171. Kommandos, sondern für alle Kommandos.
  1172.  
  1173. Das Hoch-Zeichen hat also die Funktion, die im herkoemmlichen UNIX-"echo"
  1174. der Backslash hat. Unter TOS wird der Backslash allerdings (in MS-DOS-
  1175. Konvention) als Trennzeichen zwischen Pfad(en) und Dateinamen benutzt
  1176. (wofür es in UNIX den normalen Slash gibt). Daher wird in der Okami-Shell
  1177. der Backslash durch das Hoch-Zeichen ersetzt. Deswegen muß man in der
  1178. Okami-Shell darauf verzichten, das Hoch-Zeichen anstelle des Pipe-Symbols
  1179. (|) zu benutzen, was in Unix teilweise üblich ist.
  1180. (Fazit: Es ist nicht leicht, MS-DOS und Unix unter einen Hut zu bringen,
  1181. und TOS ist eine unmögliche Mischung von beidem)
  1182.  
  1183. Beispiele:
  1184.  
  1185. 1) Ausgabe des aktuellen Directories:
  1186.     echo Das aktuelle Directory ist $CWD
  1187.         
  1188. 2) Ausgabe von VT52-Sequenzen:
  1189.     echo ^033e        schaltet den Cursor ab
  1190.     echo ^033H        setzt den Cursor auf Home-Position etc.
  1191.  
  1192. 3) Ausgabe eines Semikolons:
  1193.     echo Hallo ; ls -l    schreibt "Hallo" und führt das Kommando
  1194.                 "ls -l" aus.
  1195.     echo Hallo ^; ls -l    schreibt "Hallo ; ls -l".
  1196.  
  1197. 4) Benutzung der Sonderzeichen in anderen Shellkommandos: Einstellen eines
  1198.    Shellprompts, das aus dem String "Eingabe: >" in invertierter Schrift
  1199.    besteht; vor jedem Prompt soll ein Signalton erzeugt werden.
  1200.     PS1="^007^033pEingabe: ^>^033q"
  1201.  
  1202. -----
  1203. egrep - SIEHE grep
  1204.  
  1205. -----
  1206. else - SIEHE if
  1207.  
  1208. -----
  1209. env - Ausgabe des Environments der Shell
  1210.  
  1211. Syntax: env
  1212.  
  1213. Die der Shell übergebenen Environment-Strings werden nach StdOut ausgegeben.
  1214. Nach jedem String wird ein Newline-Zeichen eingefügt.
  1215. Dieses Kommando arbeitet ausschließlich auf dem der Shell übergebenen
  1216. Environment, was bedeutet, daß nach dem Start der Shell exportierte Shell-
  1217. variablen nicht mit ausgegeben werden. Um alle exportierten Shellvariablen
  1218. auszugeben, gibt es das Kommando `vars -ex'.
  1219.  
  1220. Siehe auch:    export
  1221.         vars
  1222.  
  1223. -----
  1224. errcode - Analyse von Fehlernummern
  1225.  
  1226. Syntax: errcode {Fehlernummer|errno}
  1227.  
  1228. errcode liefert zu einer Bios-, XBios- oder Gemdos-Fehlernummer einen er-
  1229. klärenden Text. Als Fehlernummer kan jede beliebige Zahl oder das Wort
  1230. "errno" angegeben sein, in letzterem Fall wird der Wert der internen Fehler-
  1231. variablen errno benutzt. Fehlernummern können positiv oder negativ angegeben
  1232. werden; da das Betriebssystem nur negative Fehlernummern benutzt, werden posi-
  1233. tive Nummern negiert. Die Ausgabe hat die Form
  1234.     Nummer: Text
  1235. Die Nummer wird dezimal ausgegeben und entspricht dem jeweiligen Parameter
  1236. oder dem Inhalt von errno. Der Text ist eine Kurzdefinition der Nummer. Bei
  1237. einer unbekannten Nummer lautet der Text "???".
  1238. Die Voreinstellung, wenn keine Parameter angegeben sind, lautet "errno".
  1239.  
  1240. -----
  1241. exec - Eine Datei als Binärprogramm ausführen
  1242.  
  1243. Syntax: exec [-(l|b)g] Dateiname {Parameter}
  1244. oder    exec -x Basepage-Adresse {Parameter}
  1245.  
  1246. Dient zum Laden oder Starten einer Datei als Binär-Programmdatei. Entspricht
  1247. der Gemdos-Funktion "Pexec".
  1248. Es muß der vollständige Dateiname (relativ oder absolut) angegeben werden.
  1249. Die Shellvariablen PATH und XEXT sind ohne Wirkung. Die Shellvariable GEXT
  1250. entscheidet, ob das Programm als GEM-Programm starten soll. Wenn das Flag -g
  1251. angegeben ist, wird das Programm nicht über die Shellfunktion gemexec ausge-
  1252. führt, auch wenn der Extender in $GEXT aufgeführt ist. Dies ist die Art und
  1253. Weise, mit der gemexec Programme ausführt.
  1254. Wenn das Flag -x angegeben ist, werden Programme, die zuvor mit -l geladen
  1255. wurden, gestartet. Dazu muß die von -l ermittelte Basepage-Adresse über-
  1256. geben werden.
  1257.  
  1258. Achtung: Wenn Flags angegeben sind, so müssen sie zu Beginn, also vor dem
  1259. Dateinamen stehen und dürfen nicht durch Leerzeichen getrennt sein.
  1260.  
  1261. Beispiele:
  1262. 1)    exec datei.ttp p1 p2 p3
  1263.         lädt und startet die Datei datei.ttp im aktuellen Verzeich-
  1264.         nis. Der String "p1 p2 p3" wird als Parameterzeile über-
  1265.         geben.
  1266. 2)    exec datei.prg
  1267.         Wenn der Extender .prg in der Shell-Variablen GEXT gespeichert
  1268.         ist, wird die Datei datei.prg über die Shellfunktion gemexec
  1269.         ausgeführt, ansonsten wird sie geladen und gestartet.
  1270. 3)    exec -g datei.prg
  1271.         Die Datei datei.prg wird geladen und gestartet, auch wenn der
  1272.         Extender .prg in GEXT gespeichert ist. Die Funktion gemexec
  1273.         wird also nicht aufgerufen.
  1274. 4)    exec datei.prg -g
  1275.         wie 2), aber es wird die Zeichenkette "-g" an das Programm
  1276.         übergeben.
  1277. 5)    exec -l datei.ttp
  1278.         Die Datei wird geladen. Die Startadresse der Basepage des
  1279.         Programms wird in hexadezimaler Schreibweise auf den Bild-
  1280.         schirm geschrieben. Die Adresse der Basepage kann mit
  1281.         exec -x oder dem Kommando basep weiterverarbeitet werden.
  1282.         Das Angeben von Parametern ist möglich, aber nicht sinnvoll,
  1283.         da diese beim Start des Programms mit exec -x überschrieben
  1284.         werden.
  1285. 6)    exec -b datei.ttp p1 p2 p3
  1286.         wie 2), aber es wird die Basepage des Programms erzeugt.
  1287. 7)    exec -x 0x65abc file.c
  1288.         Die zuvor mit exec -l geladene Datei datei.ttp wird ge-
  1289.         startet. Die Zeichenkette `file.c' wird als Parameter
  1290.         übergeben. exec -l sollte die Ausgabe "0x65ABC" erzeugt haben.
  1291.  
  1292. VORSICHT: Wenn bei der Verwendung von exec -x eine falsche Adresse angege-
  1293. ben wird, ist ein Absturz der Shell möglich. Es sollte nur eine Adresse
  1294. verwendet werden, die zuvor mit exec -l ermittelt wurde.
  1295.  
  1296. Siehe auch:    basep
  1297.         gemexec
  1298.  
  1299. -----
  1300. Exit - siehe exit
  1301.  
  1302. -----
  1303. exit , Exit - Beenden der Shell oder eines Shellscripts
  1304.  
  1305. Syntax: exit|Exit
  1306.  
  1307. Im Dialogmodus beenden beide Kommandos die Shell. Hat dieselbe Wirkung wie
  1308. ein Druck auf Ctrl-D in der Kommandoeingabe.
  1309. Nach einem exit wird folgendes getan:
  1310. 1)  ein evtl. mit trap definiertes Kommando wird ausgeführt.
  1311. 2)  wenn gon eingegeben worden ist, aber noch kein goff, wird goff aufgeru-
  1312.     fen.
  1313. 3)  die Speicherbereiche der Shell-Variablen werden freigegeben.
  1314. 4)  die Speicherbereiche der Tastatur-History werden freigegeben.
  1315. 5)  der für getscr/putscr reservierte Speicherbereich wird freigegeben.
  1316. 6)  ein evtl. residentes Helpfile wird freigegeben.
  1317. 7)  die Speicherbereiche der Shellfunktionen werden freigegeben.
  1318. 8)  die Speicherbereiche der Laufwerksbezeichnungen werden freigegeben.
  1319. 9)  die Speicherbereiche der Tastendefinitionen werden freigegeben.
  1320. 10) wenn das Shellflag s gesetzt ist, wird das aktuelle Verzeichnis in die
  1321.     Datei $HOME\wdir gespeichert und diese Datei unsichtbar gemacht.
  1322. 11) die DTA wird auf den Zustand vor dem Start der Shell zurückgestellt.
  1323. 12) der Eintrag im Cookiejar wird entfernt und ggfs. der Speicherbereich des
  1324.     Cookiejars freigegeben.
  1325. 13) alle evtl. noch offenen Umleitungsdateien werden geschlossen.
  1326. 14) der Speicherbereich der Environment-Stringpointer wird freigegeben.
  1327. 15) das Programm wird beendet.
  1328.  
  1329. Wenn dieses Kommando exit in einem Shellscript steht, wird nur das Shellscript
  1330. beendet. Es wird keine der oben angeführten Aktionen durchgeführt.
  1331. Wenn das Kommando Exit in einem Shellscript steht, wird die Shell wie
  1332. oben beschrieben beendet.
  1333.  
  1334. Beispiele:
  1335.  
  1336. 1. Beenden eines Shellscripts unter einer bestimmten Bedingung. Die Shell,
  1337. die dieses Script ausführt, läuft weiter.
  1338.  
  1339.     echo Dateiname?
  1340.     read FILE
  1341.     if [ -f $FILE ]
  1342.     then
  1343.       echo $FILE existiert nicht!
  1344.       exit
  1345.     end
  1346.  
  1347. 2. Beenden der Shell aus einem Shellscript heraus. Wenn der Benutzer das
  1348. falsche Passwort eingibt, wird die Shell beendet, man landet also
  1349. wieder im Desktop.
  1350.  
  1351.     echo Passwort?
  1352.     read PASSWD
  1353.     if [ $PASSWD != $SECRET ]
  1354.     then
  1355.       echo Falsches Passwort!
  1356.       Exit
  1357.     fi
  1358.  
  1359. -----
  1360. export - Shell-Variablen für das Environment markieren
  1361.  
  1362. Syntax: export [[-] {Variable}]
  1363.  
  1364. Alle als exportiert markierten Shellvariablen werden beim Start eines
  1365. Binärprogrammes als Environment in die Basepage des neuen Programmes ein-
  1366. getragen. Dadurch ist es möglich, eine Umgebung zu schaffen, die beim 
  1367. Start weiterer Programme erhalten bleibt.
  1368. Beim Aufruf ohne Parameter wird eine Liste aller exportierter Variablen
  1369. ausgegeben.
  1370. Beim Aufruf mit den Namen von mindestens einer Shellvariablen werden alle
  1371. angegebenen Variablen als exportiert markiert. Wenn Variablen angegeben
  1372. werden, die noch nicht existieren, so werden diese mit einem leeren Wert
  1373. angelegt und exportiert.
  1374. Die Namen der Variablen können dabei im Format der erweiterten Wildcards
  1375. angegeben werden, z.B. "export a*" exportiert alle Variablen, deren Name
  1376. mit a beginnt. Näheres siehe okami.doc.
  1377.  
  1378. Flag:    -    Bei den angegebenen Variablen wird die Exporiert-Markierung
  1379.         gelöscht. Damit können Variablen aus dem Environment ent-
  1380.         fernt werden.
  1381.  
  1382. Beispiel:
  1383.     PS1="Eingabe:"            Ändern des Shell-Prompts
  1384.     export PS1            Übernahme von PS1 ins Environment
  1385.     sh                Wieder-Aufruf der Shell (Subshell)
  1386.     echo PS1            Es erscheint "Eingabe:", da die
  1387.                     Variable PS1 aus dem Environment
  1388.                     eingestellt wurde.
  1389.     exit                Beenden der aufgerufenen Subshell.
  1390.     export - PS1            Entfernen von PS1 aus dem Environm.
  1391.  
  1392. Siehe auch:    env
  1393.         readonly
  1394.         vars
  1395. Zum Format des Environments siehe okami.doc.
  1396.  
  1397. -----
  1398. extname - Dateinamen-Extender ermitteln
  1399.  
  1400. Syntax: extname filename
  1401.  
  1402. Der Extender des angegebenen Filenamen wird nach StdOut geschrieben (incl.
  1403. dem Punkt vor dem Extender). Wenn der Dateiname keinen Extender hat, wird
  1404. nur ein Zeilenvorschub ausgegeben.
  1405. Dies ist eine reine Stringfunktion, das Ergebnis ist unabhängig von der
  1406. Einstellung des Shell-Flags l (siehe set) und davon, ob die angegebene Datei
  1407. existiert oder nicht.
  1408.  
  1409. Beispiele:
  1410.     extname d:/shell/sh.ttp     erzeugt die Ausgabe ".ttp".
  1411.     extname profile            erzeugt einen Zeilenvorschub.
  1412.     EXT=`extname hallo.txt`        einlesen in eine Variable.
  1413.  
  1414. Siehe auch: basename
  1415.         dirname
  1416.         drvname
  1417.         fullname
  1418.  
  1419. -----
  1420. false - Rückgabe von 0
  1421.  
  1422. Syntax: false
  1423.  
  1424. Dieses Kommando gibt immer eine 0 zurück. Es wird normalerweise mit while
  1425. oder if verwendet.
  1426.  
  1427. Beispiel: Ausblenden eines Teiles eines Shellscripts. Durch "true" anstelle
  1428. von "false" kann der Teil wieder aktiviert werden.
  1429.  
  1430.         if false
  1431.         then
  1432.           ............. (irgendwelche Kommandos)
  1433.         fi
  1434.  
  1435. Siehe: if
  1436.        while
  1437.        true
  1438.  
  1439. -----
  1440. fcts - Shellfunktionen auflisten
  1441.  
  1442. Syntax: fcts [-l]
  1443.  
  1444. Es wird eine Liste aller Shellfunktionen ausgegeben. Zu jeder Funktion er-
  1445. scheint eine Zeile der Form:
  1446.  
  1447.     365  hallo()
  1448.  
  1449. Die Zahl ist die Größe der Funktion in Bytes.
  1450. Nach der Liste wird eine Statistik ausgegeben, die folgende Angaben umfaßt:
  1451.     Summe der Größen aller Funktionen,
  1452.     Anzahl der Funktionen,
  1453.     Maximalanzahl der zu definierenden Funktionen,
  1454.     prozentuelle Belegung der Funktionstabelle.
  1455.  
  1456. Wenn das Flag -l angegeben ist, werden stattdessen die Definitionen aller
  1457. Shellfunktionen ausgegeben, und zwar in einem Format, das später zur Ins-
  1458. tallation der Shellfunktionen benutzt werden kann.
  1459.  
  1460. Beispiel:
  1461.  
  1462.     trap +fcts -l ^>$ETC/fcts.sh
  1463.  
  1464. schreibt bei Ende der Shell die Definitionen aller Funktionen in die Datei
  1465. $ETC/fcts.sh . Mit der folgenden Zeile im Profile:
  1466.  
  1467.     . $ETC/fcts.sh
  1468.  
  1469. werden die Funktionen dann wieder geladen und so auf die alten Werte einge-
  1470. stellt.
  1471.  
  1472. -----
  1473. fgrep - SIEHE grep
  1474.  
  1475. -----
  1476. fi - SIEHE if
  1477.  
  1478. -----
  1479. find - Dateien suchen
  1480.  
  1481. Syntax: find Startdirectory Suchmaske
  1482.  
  1483. Findet alle Dateien ab dem angegebenen Startdirectory, die auf die ange-
  1484. gebene Suchmaske passen. Es wird rekursiv in allen Ordnern gesucht.
  1485.  
  1486. Beispiel:
  1487. 1) Ausgabe aller Shellscripts, die unter dem Home-Directory liegen:
  1488.     find $HOME *.sh
  1489.         
  1490. 2) Listen aller Dateien, die auf einer Festplattenpartition liegen:
  1491.     find c:\ *
  1492.         
  1493. 3) Listen aller C-Quelldateien ab dem aktuellen Directory:
  1494.     find . *.c
  1495.  
  1496.  
  1497. Die Verwendung dieses Kommandos ist nützlich mit Kommandos, die von ihrer
  1498. Eingabe Dateinamen einlesen (z.B. backup). In Verbindung mit xargs können
  1499. auch andere Kommandos für die entsprechenden Dateien aufgerufen werden.
  1500.  
  1501. -----
  1502. fsel - eine Datei mit der Fileselect-Box auswählen
  1503.  
  1504. Syntax: fsel [Pfad [Default [Variable [Label]]]]
  1505.  
  1506. Es wird die AES-Fileselect-Box aufgerufen, um eine Datei auszuwählen,
  1507. deren Name nach StdOut geschrieben wird. Damit dieser Aufruf funktioniert,
  1508. muß die Shell als GEM-Applikation angemeldet werden. Dies geschieht mit
  1509. dem Kommando gon, das vor fsel aufgerufen werden muß.
  1510.  
  1511. In Pfad kann der Suchpfad und das Suchmuster der darzustellenden Dateien
  1512. angegeben werden. In Default kann der als ausgewählt voreinzustellende
  1513. Dateiname angegeben werden. Label ist die Überschrift für die Fileselect-
  1514. Box. Die Angabe einer Überschrift ist erst ab TOS 1.4 möglich, bei älteren
  1515. TOS-Versionen ist dieser Parameter ohne Wirkung. Wenn Label Leerzeichen
  1516. enthält, muß es in Anführungszeichen eingeschlossen sein.
  1517. Achtung: da die Pfadangabe nicht von der Shell, sondern vom AES ausge-
  1518. wertet wird, dürfen hier nur Gemdos-Wildcards benutzt werden.
  1519. Wenn Pfad, Default oder Label nicht angegeben sind lautet die Voreinstellung:
  1520.  
  1521.     Pfad    = ".\*.*"    (alle Dateien im aktuellen Directory)
  1522.     Default = ""        (keine Voreinstellung)
  1523.     Label   = "Okami Shell"
  1524.  
  1525. Wenn der Anwender die Abbruch-Taste der Fileselect-Box anwählt, gibt fsel
  1526. eine 0 zurück, ansonsten eine 1. Dieser Rückgabewert kann in der Shell-
  1527. variablen "?" abgefragt werden.
  1528. Wenn als dritter Parameter eine Variable angegeben ist, wird der Rück-
  1529. gabewert (0 bei Abbruch, 1 sonst) auch in dieser Variablen abgelegt.
  1530. Wenn dieser Parameter, nicht aber der zweite benutzt wird (weil keine Vor-
  1531. einstellung gewünscht ist), muß der zweite Parameter . (Punkt) oder ""
  1532. (zwei doppelte Anführungszeichen) lauten.
  1533.  
  1534. Beispiele:
  1535.     gon            muß immer zuerst kommen
  1536.     fsel            Auswahl aus allen Dateien im aktuellen Dir.
  1537.     fsel *.c        Auswahl aus allen C-Dateien
  1538.     fsel e:\shell\*.c    Auswahl aus den C-Dateien in e:\shell
  1539.     A=`fsel *.c`        Einlesen in eine Variable
  1540.     echo $?         Ausgabe von 0, falls Abbruch, 1 sonst
  1541.     fsel *.c sh.c VAR
  1542.     echo $VAR        Ergebnis in eine Variable speichern
  1543.     fsel *.c sh.c VAR "Bitte eine Datei auswählen"
  1544.                 Benutzung der Überschrift
  1545.  
  1546. Da die Fileselect-Box den von ihr benutzten Bildschirmbereich nicht wieder
  1547. restauriert, speichert fsel den gesamten Bildschirm vor dem Aufruf der
  1548. Fileselect-Box ab. Daher müssen beim Aufruf von fsel mindestens 32000
  1549. Bytes an freiem Speicher verfügbar sein.
  1550.  
  1551. Rückgabewert:
  1552.     1    Abbruch angewählt.
  1553.     0    Ok angewählt.
  1554.  
  1555. -----
  1556. fullname - Absoluten Dateinamen ermitteln
  1557.  
  1558. Syntax: fullname file
  1559.  
  1560. Ermittelt den vollen, absoluten Dateinamen der angegebenen Datei. Der abso-
  1561. lute Dateiname ist von dem Format
  1562.     Laufwerk ":\" Pfad "\" Dateiname
  1563. z.B. "d:\shell\sh.ttp". Es ist ohne Bedeutung, ob eine Datei mit dem ange-
  1564. gebenen Namen existiert.
  1565.  
  1566. Beispiele: Es sei D: das aktuelle Laufwerk, d:\shell das aktuelle Directory
  1567. von Laufwerk D: und c:\compiler\cc das aktuelle Laufwerk von Laufwerk C:.
  1568.  
  1569.     fullname von...         ergibt...
  1570.  
  1571.     c:\files\hallo.txt        c:\files\hallo.txt
  1572.     c:test.c            c:\compiler\cc\test.c
  1573.     sh.ttp                d:\shell\sh.ttp
  1574.     \sh.ttp             d:\sh.ttp
  1575.     bin\ship.exe            d:\shell\bin\ship.exe
  1576.  
  1577. Siehe auch: basename
  1578.         dirname
  1579.         drvname
  1580.         extname
  1581.  
  1582. -----
  1583. gemexec - Shellfunktion zum Starten von GEM-Programmen
  1584.  
  1585. Syntax: Programmname {Parameter}
  1586.  
  1587. Bei gemexec handelt es sich um eine Shellfunktion, die nicht direkt vom Be-
  1588. nutzer, sondern von der Shell selber aufgerufen wird. Der Sinn der Sache ist,
  1589. manche Programme, insbesondere GEM-Programme, unter besonderen Bedingungen
  1590. aufzurufen. Wenn ein GEM-Programm aufgerufen wird, soll z.B. vorher der Bild-
  1591. schirm gelöscht, der Cursor ab- und die Maus eingeschaltet werden, und nach
  1592. dem Ende des Programms soll der Bildschirm wieder gelöscht werden. Um diese
  1593. Prozedur möglichst flexibel und vom Anwender konfigurierbar zu gestalten, wer-
  1594. den GEM-Programme (das sind per Definition alle externen Kommandos, deren
  1595. Extender in der Shellvariablen GEXT gespeichert sind) über die Shellfunktion
  1596. gemexec ausgeführt. Diese Funktion kann alle weiteren Aktionen durchführen und
  1597. ist auch dafür verantwortlich, daß das Programm überhaupt gestartet wird.
  1598.  
  1599. Nach dem Start der Shell wird die Funktion folgendermaßen initialisiert:
  1600.  
  1601.     gemexec()
  1602.     {
  1603.       _=$0 $*
  1604.       cursor -v;scr -g
  1605.       exec -g $_
  1606.       cls
  1607.       _=
  1608.     }
  1609.  
  1610. Beim Aufruf der Funktion gemexec enthält die Shellvariable $0 nicht den Namen
  1611. der Funktion, sondern den vollständigen Pfadnamen des aufzurufenden Programms.
  1612. Die Shellvariable $* enthält die zu übergebenen Parameter. Die Funktion kann 
  1613. kann vom Anwender beliebig verändert werden, aber um das betreffende Programm
  1614. ordnungsgemäß aufzurufen, sollte sie zumindest folgendes tun:
  1615.  
  1616.     1) Speichern von $0 und $* in einer Shellvariablen, hier: _
  1617.     2) Durchführung aller Aktionen vor Programmstart, hier: cls und
  1618.        cursor -v (Bildschirm löschen und Cursor abschalten).
  1619.     3) Aufruf des Programms mit dem Kommando "exec -g $_"
  1620.        Anstelle von $_ kann die in 1) benutzte Variable, aber
  1621.        auch andere Werte stehen.
  1622.        ACHTUNG: Beim Aufruf von exec muß UNBEDINGT das Flag -g angegeben
  1623.        werden!!!!! Ansonsten wird exec die Funktion gemexec nochmal mit
  1624.        denselben Parametern aufrufen => infinite Rekursion.
  1625.     4) Die Freigabe der Variablen (hier: _) ist nicht unbedingt notwendig,
  1626.        da sie immer wieder verwendet wird.
  1627.  
  1628. Die Funktion gemexec kann wie jede Shellfunktion programmiert werden, was be-
  1629. deutet, daß sie auch Kontrollstrukturen wie if und while beinhalten kann. Sie
  1630. kann den in $0 übergebenen Programmnamen mit basename und extname analysieren
  1631. und entsprechende Operationen durchführen. Sie muß nicht unbedingt das Pro-
  1632. gramm, daß in $0 übergeben wird, ausführen; dadurch ist es möglich, etwas
  1633. völlig anderes als ein Programm auf diese Weise aufzurufen.
  1634.  
  1635. In der Datei tricks.doc befindet sich eine gemexec-Funktion, die nach dem
  1636. Ende eines GEM Programms den Bildschirm wieder so herstellt, wie er vor dem
  1637. Aufruf war, sowie eine, die das "Anwendung anmelden" des Desktop simuliert.
  1638.  
  1639. Siehe auch:    exec
  1640.         den Abschnitt über gemexec in tricks.doc
  1641.  
  1642. -----
  1643. getscr - Bildschirminhalt laden und sichern
  1644.  
  1645. Syntax: getscr [-[Header] Dateiname]
  1646.  
  1647. Der Bildschirminhalt wird in einem internen Speicherbereich gesichert. Er
  1648. kann mit dem Kommando putscr wiederhergestellt werden.
  1649. Wenn das Flag - angegeben ist, wird der Bildschirminhalt aus der angegebenen
  1650. Datei gelesen. Dazu kann die Länge eines Headers angegeben werden, der über-
  1651. lesen wird. Wenn kein Header angegeben wird, wird kein Header überlesen.
  1652.  
  1653. Durch nochmaligen Aufruf von getscr wird der zuvor gespeicherte Bildschirm
  1654. überschrieben.
  1655.  
  1656. Beispiel:
  1657.     getscr
  1658.             Sichern des aktuellen Bildschirminhaltes
  1659.     getscr - <picture.doo
  1660.             Laden eines Doodle-Bildes (32000 Bytes)
  1661.     getscr -34 <picture.pi3
  1662.             Laden eines Degas-PI3-Bildes (32066 Bytes)
  1663.  
  1664. Siehe: putscr
  1665.        showpic (externes Kommando)
  1666.  
  1667. -----
  1668. goff - Abmeldung von AES
  1669.  
  1670. Syntax: goff
  1671.  
  1672. Die Shell meldet sich als Applikation vom AES ab, und der Bildschirm wird
  1673. gelöscht. Wird beim Beenden der Shell mit `exit' bei Bedarf automatisch
  1674. ausgeführt.
  1675. Wenn vor der Eingabe von goff nicht gon eingegeben worden ist, erscheint
  1676. stattdessen eine Fehlermeldung.
  1677.  
  1678. Siehe: gon
  1679.  
  1680. -----
  1681. gon - Anmeldung bei AES
  1682.  
  1683. Syntax: gon [-q]
  1684.  
  1685. Die Shell meldet sich bei GEM als Applikation an und initialisiert den
  1686. Pfadnamen des Clipboards. gon öffnet eine Virtual Workstation und ini-
  1687. tialisiert daraus die von da an von der Shell benutzten Werte für die
  1688. Bildschirmauflösung (Grafik und Text) sowie die Größe des Bildschirm-
  1689. speichers. Die zu Beginn der Shell initialisierten Werte gehen von einer
  1690. Bildauflösung von 640x400 Pixeln und 80x25 Zeichen sowie einem Bildschirm-
  1691. speicherbedarf von 32000 Bytes aus.
  1692. gon liest (mit der AES-Funktion scrp_read) den Pfadnamen des installierten
  1693. Clipboards. Falls ein solcher definiert ist, wird er in der Shellvariablen
  1694. CLIPDIR abgelegt. Falls nicht, wird umgekehrt der Inhalt von CLIPDIR als
  1695. Clipboard-Pfad installiert (mit scrp_write).
  1696.  
  1697. Dieses Kommando ist nützlich bei der Verwendung von GEM-Applikationen.
  1698. Außerdem muß es vor der Verwendung einiger interner Kommandos (z.B. fsel
  1699. und mouse) benutzt werden.
  1700. Außerdem hat gon folgende Konsequenzen:
  1701. 1) die Tastatureingabe läuft über die AES-Funktion evnt_keybd statt über
  1702.    die Gemdos-Funktion Crawcin,
  1703. 2) das Kommando sleep benutzt die AES-Funktion evnt_timer statt einer
  1704.    Warteschleife.
  1705. Daraus ergibt sich, daß Accessories, die im Multitasking-Betrieb laufen,
  1706. bei aktiviertem gon während der Tastatureingabe und dem sleep-Kommando
  1707. aktiviert werden. Ein Accessory, das laufend die Uhrzeit auf den Bild-
  1708. schirm schreibt, tut dies also während der Tastatureingabe, wenn gon
  1709. aktiv ist. Dasselbe gilt für andere Hintergrund-Accessories wie Drucker-
  1710. spooler o.ä.
  1711. Die Tastaturpufferung funktioniert jedoch trotzdem, da die Tastaturein-
  1712. gaberoutine erst den Tastenpuffer ausliest, bevor sie weitere Tasten mit
  1713. evnt_keybd einliest.
  1714.  
  1715. Wird gon mehrfach hintereinander aufgerufen, ohne daß zwischendurch goff
  1716. aufgerufen wird, erscheint eine Fehlermeldung.
  1717.  
  1718. Wenn das Flag -q angegeben ist, meldet sich die Shell nicht als Applikation
  1719. an, sondern es wird folgender Rückgabewert (in $?) zurückgeliefert:
  1720.     1    wenn gon bereits aktiviert ist,
  1721.     0    sonst.
  1722. Um Fehlermeldungen zu vermeiden, sollten Shellscripts, die mit Kommandos, die
  1723. gon erfordern (z.B. fsel), folgendermaßen vorgehen:
  1724.  
  1725.     gon -q
  1726.     GONSTAT=$?
  1727.     if [ $GONSTAT = 0 ]
  1728.     then
  1729.       gon
  1730.     fi
  1731.     
  1732.     ...................... andere Kommandos
  1733.     
  1734.     if [ $GONSTAT = 0 ]
  1735.     then
  1736.       goff
  1737.     fi
  1738.     unset GONSTAT
  1739.  
  1740. Auf diese Weise wird der Status von gon (aktiv oder nicht) in einer Variablen
  1741. (GONSTAT) gespeichert und benutzt, um gon ggfs. zu aktivieren und später wieder
  1742. zu deaktivieren.
  1743. Es wird empfohlen, gon als eines der ersten Kommandos im Profile aufzurufen.
  1744. Wenn die Shell aus dem Autoordner gestartet wird, sollte dieses Kommando
  1745. nicht verwendet werden, da zu dieser Zeit das AES noch nicht initialisiert
  1746. ist.
  1747.  
  1748. Siehe:    clipb
  1749.     goff
  1750.     sleep
  1751.  
  1752. -----
  1753. grep , egrep , fgrep - Mustersuche
  1754.  
  1755. Syntax: grep|fgrep|egrep [-cfsl] Pattern {File}
  1756.  
  1757. Sucht in allen angegebenen Dateien oder, falls keine Dateien angegeben sind,
  1758. in StdIn nach Zeilen, die auf das Muster Pattern passen. Die gefundenen
  1759. Zeilen werden mit dem Dateinamen ausgegeben.
  1760.  
  1761. fgrep sucht feste Strings. Es werden alle Zeilen ausgegeben, die den String
  1762. Pattern enthalten.
  1763.  
  1764. grep sucht Muster nach den Regeln der erweiterten Wildcards (siehe okami.doc).
  1765. Es werden alle Zeilen ausgegeben, in denen sich eine Zeichenkette befindet,
  1766. die nach den Regeln der erweiterten Wildcards auf Pattern paßt.
  1767. Wenn Pattern mit einer Tilde (~) beginnt, wird Pattern ab dem Beginn der Zei-
  1768. len gesucht. Wenn Pattern mit einem Dollarzeichen ($) endet, wird Pattern am
  1769. Ende der Zeilen gesucht. Achtung: in der Eingabe muß das Dollarzeichen in ein-
  1770. fachen Anführungszeichen ('$') oder hinter einem Dach (^$) stehen, da es sonst
  1771. als Einleitung einer Shellvariablen interpretiert wird.
  1772.  
  1773. egrep sucht Muster, die vollen regulären Ausdrücken (REs) entsprechen. Diese
  1774. werden nach folgenden Regeln gebildet:
  1775.  
  1776. * Jedes Zeichen ist ein RE und steht für sich selber. Sonderzeichen können
  1777.   durch einen vorgestellten \ gequotet werden.
  1778. * Ein Punkt (.) ist ein RE und steht für ein einziges beliebiges Zeichen.
  1779. * Ein Zirkumflex (^) ist ein RE und steht für den Anfang der Zeile.
  1780. * Ein Dollar ($) ist ein RE und steht für das Ende der Zeile.
  1781. * Wenn x ein RE ist, dann ist auch (x) ein RE. (Klammerung)
  1782. * Ein RE, gefolgt von einem Stern (*), bedeutet beliebig ofte (auch 0-malige
  1783.   Wiederholung des RE.)
  1784. * Ein RE, gefolgt von einem Plus (+), bedeutet beliebig ofte, aber mindestens
  1785.   1-malige Wiederholung des RE.
  1786. * Ein RE, gefolgt von einem Fragezeichen (?), bedeutet einmalige oder 0-malige
  1787.   Wiederholung des RE.
  1788. * Eine Anzahl von Zeichen in eckigen Klammern ([]) ist ein RE und steht für
  1789.   ein einziges Zeichen, und zwar eins der in den Klammern. Wenn das erste
  1790.   Zeichen in den Klammern ein Zirkumflex (^) ist, steht der RE für ein
  1791.   einziges Zeichen, und zwar ein beliebiges außer denen in den Klammern.
  1792.   Ein Minus (-) in den Klammern bedeutet "bis". Wenn ein - oder ] das erste
  1793.   Zeichen in den eckigen Klammern ist (ggfs. nach ^), dann verliert es
  1794.   seine besondere Bedeutung und steht für sich selber.
  1795. * Zwei REs, die durch einen senkrechten Strich (|) getrennt sind, sind eine
  1796.   RE und stehen für die eine oder die andere RE.
  1797.  
  1798. Die Funktionen zum Vergleich auf reguläre Ausdrücke stammen von Henry Spencer.
  1799.  
  1800. Da die Vergleichsfunktionen für reguläre Ausdrücke sehr effizient arbeiten,
  1801. ist egrep bei festen Strings schneller als grep, aber langsamer als fgrep.
  1802.  
  1803. Flags:
  1804.     -c    Es werden die Zeilennummern der gefundenen Zeilen mit ausge-
  1805.         geben.
  1806.     -f    Es wird in jeder Datei nur die erste Übereinstimmung gesucht.
  1807.     -s    (nur für grep) berücksichtigt Whitespace-Zeichen am Zeilen-
  1808.         anfang. Wenn -s nicht angegeben ist, werden Whitespace-Zeichen
  1809.         am Zeilenanfang ignoriert.
  1810.     -l    ignoriert Groß- und Kleinschreibung.
  1811.  
  1812. Beispiele:            findet z.B. die Zeile
  1813.  
  1814.     grep Hallo        Der Mann sagte "Hallo".
  1815.                 Hallo, sagte der Mann.
  1816.     grep H*o        Der Mann sagte nochmal "Hallo".
  1817.                 Heute oder morgen.
  1818.     grep [hH]allo        hallo
  1819.                 Hallo
  1820.     grep -l hallo        (dito)
  1821.                 Der Mann sagte zum dritten Mal "Hallo".
  1822.     grep Hallo^$        Der Mann sagte zu letztenmal Hallo
  1823.     fgrep ~[a-n]*[aAbB]?^$    Hier steht "~[a-n]*[aAbB]?$".
  1824.  
  1825.     fgrep printf *.c    sucht alle printf-Aufrufe in allen C-Dateien.
  1826.     fgrep "printf *.c"    sucht die Zeichenkette "printf *.c" in StdIn.
  1827.     cmds | grep ~[gst]    Ausgabe aller interner Kommandos, die mit g,
  1828.                 s oder t beginnen.
  1829.     egrep printf^|strcpy^|fopen *.c
  1830.                 sucht in allen C-Dateien alle Zeilen, die
  1831.                 printf, strcpy oder fopen enthalten. Die
  1832.                 |-Zeichen sind keine Pipes, sondern Teil des
  1833.                 regulären Ausdruckes und müssen daher durch
  1834.                 ein vorgestelltes ^ gequotet werden.
  1835.  
  1836. Rückgabewert:
  1837.     -1    Aufruffehler
  1838.     sonst    Anzahl der gefundenen Übereinstimmungen.
  1839.  
  1840. -----
  1841. hardcopy - Bildschirminhalt ausdrucken
  1842.  
  1843. Syntax: hardcopy
  1844.  
  1845. Falls ein Drucker empfangsbereit ist, wird eine Bildschirm-Hardcopy ausge-
  1846. druckt (nur bei S/W-Monitor möglich), ansonsten erscheint eine Fehler-
  1847. meldung. Da die Hardcopy durch eine Betriebssystemfunktion ausgeführt
  1848. wird, muß für manche Drucker ein entsprechender Druckertreiber installiert
  1849. sein.
  1850.  
  1851. Rückgabewert:
  1852.     0    Ok., es ist gedruckt worden.
  1853.     -1    Der Drucker war nicht bereit.
  1854.  
  1855. -----
  1856. hash - Einstellen und Auslesen der Hash-Tabelle
  1857.  
  1858. Syntax: hash [Kommando [Pfad]]
  1859. oder    hash -r {Pattern}
  1860. oder    hash -a {file}
  1861.  
  1862. Wenn von der Shell aus ein externes Kommando (Programm oder Shellscript) auf-
  1863. gerufen wird, dann wird dieses auf allen in der Shellvariablen PATH gespei-
  1864. cherten Pfaden in Verbindung mit allen in XEXT und SEXT gespeicherten Ex-
  1865. tendern gesucht. Wenn dann der zu dem Kommando gehörende vollständige Datei-
  1866. name gefunden ist, wird dieser in einer sog. Hash-Tabelle (benannt nach der
  1867. zugrundeliegenden Datenstruktur) abgelegt. Beim nächsten Aufruf desselben
  1868. Kommandos wird der Pfad dann der Hash-Tabelle entnommen, wodurch das auf-
  1869. wendige Suchen auf der Platte entfällt.
  1870. Ein Eintrag in der Hash-Tabelle besteht aus zwei Teilen: dem Aufruf-Kommando
  1871. und dem vollständigen Dateinamen (Pfad).
  1872. Mit dem Kommando hash kann diese Hash-Tabelle ausgelesen, verändert und ge-
  1873. löscht werden. Es gibt folgende Möglichkeiten des Aufrufs:
  1874.  
  1875. 1.    hash
  1876.         (keine Parameter) Die Einträge der Hash-Tabelle werden nach
  1877.         StdOut ausgegenen. Danach folgt eine Statistik über den be-
  1878.         legten Platz in der Tabelle.
  1879. 2.    hash Cmd
  1880.         (ein Parameter) Es werden die Definitionen aller Tabellen-
  1881.         einträge, deren Kommando-Teil auf Cmd paßt (laut den Regeln
  1882.         für erweiterte Wildcards), in der Form gültiger hash-Kommandos
  1883.         ausgegeben (siehe 3.)
  1884. 3.    hash Cmd Pfad
  1885.         (zwei Parameter) Es wird ein Eintrag in der Hash-Tabelle er-
  1886.         zeugt, und zwar mit dem angegebenen Kommando und Parameter.
  1887.         Auf diese Weise kann die Hashtabelle ohne den Aufruf von
  1888.         Kommandos belegt werden.
  1889. 4.    hash -r {Pattern}
  1890.         Es werden alle Einträge, die auf Pattern passen (laut den Re-
  1891.         geln für erweiterte Wildcards), aus der Tabelle gelöscht-
  1892.         Wenn kein Pattern angegeben ist, wird die Tabelle vollständig
  1893.         gelöscht.
  1894. 5.    hash -a {File}
  1895.         Alle angegebenen Dateien werden, falls die ausführbar sind, in
  1896.         die Hashtabelle eingetragen. Als Kommandoname wird der Basis-
  1897.         name der Dateien ohne Extender benutzt. Wenn ein Kommando be-
  1898.         reits in der Hashtabelle steht, wird der Anwender gefragt, ob
  1899.         dessen Definition ersetzt werden soll. Ein Druck auf ENTER oder
  1900.         die Eingabe eines Wortes, das mit y oder Y beginnt, heißt ja,
  1901.         jede andere Eingabe heißt nein. Wenn die Eingabe mit q oder Q
  1902.         beginnt, wird das hash-Kommando abgebrochen.
  1903.         Wenn kein File angegeben ist, werden alle Dateien des aktuellen
  1904.         Directories benutzt.
  1905.  
  1906. Beispiele:
  1907.  
  1908. hash
  1909.     Der Inhalt der Hashtabelle wird ausgegeben.
  1910.  
  1911. hash a*
  1912.     Es werden die Definitionen aller Kommandos ausgegeben, die mit a
  1913.     beginnen.
  1914.  
  1915. hash cc c:/compiler/cc.ttp
  1916.     Für das Kommando cc wird der Pfad "c:/compiler/cc.ttp" festgelegt.
  1917.     In Zukunft wird dieser Pfad durch das Kommando cc angesprochen, ohne
  1918.     daß auf der Platte gesucht werden muß. Es ist dafür nicht notwendig,
  1919.     daß c:/compiler in $PATH enthalten ist.
  1920.  
  1921. hash -r cc
  1922.     Obiger Eintrag wird wieder aus der Tabelle entfernt.
  1923.  
  1924. hash -r
  1925.     Die Tabelle wird gelöscht.
  1926.  
  1927. hash -a c:/bin/* c:/usr/bin/*
  1928.     Alle ausführbaren Dateien (Shellscripts und Binärprogramme) in den
  1929.     Directories c:/bin und c:/usr/bin werden in die Hashtabelle einge-
  1930.     tragen.
  1931.  
  1932. hash * >hash.sh
  1933.     Die Hashtabelle wird in eine Datei geschrieben. Diese Datei ist ein
  1934.     Shellscript, das, wenn es ausgeführt wird, die Hashtabelle auf den
  1935.     aktuellen Stand restauriert. Dieses Kommando kann z.B. mit trap
  1936.     für das Ende der Shell eingestellt werden, die Datei hash.sh kann
  1937.     vom Profile aus gestartet werden.    
  1938.  
  1939. -----
  1940. hd - Hex-Dump
  1941.  
  1942. Syntax: hd [-b] [File]
  1943.  
  1944. Gibt einen Hex-Dump von StdIn oder, falls angegeben, von File, nach StdOut.
  1945. Der Hexdump ist folgendermaßen aufgebaut:
  1946.  
  1947. nnnnnn hh hh ..... hh hh aaaaaaaa aaaaaaaa
  1948.  
  1949. nnnnnn: Die Byte-Nummer (Hex)
  1950. hh:    jeweils ein Byte in Hex (insgesamt 16)
  1951. aa...a: die entsprechenden Bytes in Ascii (ein Punkt, falls nicht druckbar.
  1952.     Es wird der Punkt mit Ascii-Code 0xfa benutzt.).
  1953.  
  1954. Flags:    -b    An der Stelle aa...a werden keine Punkte, sondern immer die
  1955.         Ascii-Zeichen ausgegeben, auch wenn diese nicht druckbar
  1956.         sind. Eine solche Ausgabe kann man dann z.B. zu dem Kommando
  1957.         raw -n pipen.
  1958.  
  1959. Um einen flüchtigen Überblick über den binären Inhalt einer Datei zu ge-
  1960. winnen, reicht es in manchen Fällen aus, das Kommando raw zu benutzen, das
  1961. wesentlich schneller ist und eine kürzere Ausgabe erzeugt.
  1962.  
  1963. Beispiele:
  1964. 1) Hex-Dump einer Binärdatei:
  1965.     hd sh.ttp
  1966.  
  1967. 2) Hex-Dump der Inhalte der Speicherstellen 0xabc000 bis 0xabcfff:
  1968.     memex 0xabc000 0xfff | hd
  1969.  
  1970. 3) Seitenweiser Hexdump:
  1971.     hd sh.ttp | pg
  1972.  
  1973. 4) Hexdump der Dateien test1.tos, test2.tos und test3.tos in die Datei
  1974.    test.hd:
  1975.     hd test1.tos test2.tos test3.tos > test.hd
  1976.  
  1977.  
  1978. Siehe auch:    raw
  1979.  
  1980. -----
  1981. help - Kurzanleitung mit Syntaxerklärung
  1982.  
  1983. Datei:    $ETC/help
  1984. Syntax: help
  1985.  
  1986. Die Datei Datei $ETC/help wird nach StdOut ausgegeben. Die Ausgabe erfolgt
  1987. mit dem Kommando pg.
  1988.  
  1989. Siehe: pg
  1990.  
  1991. -----
  1992. history - history-Tabelle laden und speichern
  1993.  
  1994. Syntax: history [-(l|s)]
  1995.  
  1996. Wenn kein Parameter angegeben ist, werden alle Einträge der Tastatur-History-
  1997. tabelle nach StdOut geschrieben, der zuletzt eingegebene Eintrag zuletzt.
  1998. (Das ist, wenn history von der Tastatur eingegeben wurde, das history-Kommando
  1999. selber).
  2000. Wenn der Parameter -l angegeben ist, werden Zeilen von StdIn eingelesen und
  2001. nacheinander in die History-Liste eingefügt, so als ob sie über die Tastatur
  2002. eingegeben würden.
  2003.  
  2004. Wenn das Flag -s angegeben ist, wird nur eine Statistik über freie und belegte
  2005. Plätze in der History-Liste ausgegeben. Hierbei ist zu beachten, das die His-
  2006. tory-Liste in der Art eines Ringpuffers organisiert ist, was bedeutet, daß sie
  2007. niemals überlaufen kann.
  2008.  
  2009. Mit den folgenden Zeilen im Profile:
  2010.  
  2011.     HISTFILE=$ETC/history
  2012.     if [ -f $HISTFILE ]
  2013.     then
  2014.              history -l <$HISTFILE
  2015.     fi
  2016.     trap +history ^>$HISTFILE ^; chmod +h $HISTFILE
  2017.  
  2018. wird bei jedem Programmende die History-Liste in die Datei $ETC/history ge-
  2019. schrieben (und die Datei unsichtbar gemacht), und bei Programmstart wird die
  2020. History aus dieser Datei wiederhergestellt.
  2021. Anmerkung: 
  2022. 1) es genügt:
  2023.     trap +history ^>$HISTFILE
  2024.    , aber dann ist die Datei nicht unsichtbar.
  2025. 2) das Pluszeichen vor history verhindert das Überschreiben eines evtl. be-
  2026.    reits definierten Trap-Kommandos.
  2027.  
  2028. Siehe auch:    trap
  2029.         okami.doc zum Thema Tastatureingabe
  2030.  
  2031. -----
  2032. if , then , else , fi - Bedingte Ausführung
  2033.  
  2034. Syntax: if Kommando1
  2035.     then
  2036.     Kommandos2
  2037.     [else
  2038.      Kommandos3]
  2039.     fi
  2040.  
  2041. Mit dieser Befehlsfolge ist es möglich, Teile eines Shellscripts nur
  2042. dann auszuführen, wenn eine bestimmte Bedingung zutrifft. Die Verwen-
  2043. dung bei Tastatureingabe ist ebenfalls möglich, aber nicht unbedingt
  2044. sinnvoll.
  2045.  
  2046. Wenn der Rückgabewert von Kommando1 ungleich 0 ist, werden die unter
  2047. Kommandos2 angegebenen Kommandos ausgeführt. Wenn der Rückgabewert
  2048. von Kommando1 gleich 0 ist, werden die unter Kommandos3 angegebenen
  2049. Kommandos ausgeführt, falls angegeben. Hierbei sind Kommandos2 und
  2050. Kommandos3 Folgen von beliebig vielen (auch null) beliebigen Shellkommandos
  2051. (auch weitere if-else-fi-Konstruktionen). Es können über 32000 if's ge-
  2052. schachtelt werden.
  2053.  
  2054. Als Kommando1 kann ein beliebiges Shell-Kommando stehen. Die meisten
  2055. internen Kommandos geben im Fehlerfall -1, sonst 0 zurück. Bei einigen
  2056. Kommandos (z.B. grep) hat der Rückgabewert eine andere Bedeutung.
  2057. Typische Kandidaten für "Kommando1" sind true, false und test (bzw. "[").
  2058.  
  2059.  
  2060. Beispiele:
  2061.  
  2062. Die folgenden Beispiele sind als Ausschnitte von Shellscripts zu verstehen.
  2063.  
  2064. 1) Ausgabe der Information, ob eine Datei existiert
  2065.  
  2066.     if test -f datei.txt
  2067.     then
  2068.       echo datei.txt existiert
  2069.     else
  2070.       echo datei.txt existiert nicht
  2071.     fi
  2072.  
  2073. 2) Feststellen, ob ein Muster in einer Datei vorhanden ist
  2074.    (Die Ausgabe von grep wird nach NULL: umgeleitet, damit sie nicht die
  2075.     Bildschirmausgabe stört.)
  2076.  
  2077.     if grep Muster datei.dat >NULL:
  2078.     then
  2079.       echo Das Muster ist vorhanden.
  2080.     else
  2081.       echo Es ist nicht vorhanden.
  2082.     fi
  2083.  
  2084. 3) Sicherheitsabfrage vom Benutzer einholen. Wenn der Benutzer "n" ein-
  2085.    gibt, wird das Programm abgebrochen (d.h. das augenblickliche Shell-
  2086.    script beendet).
  2087.  
  2088.     echo "Soll das Programm fortgesetzt werden? (j/n)"
  2089.     read JAODERNEIN
  2090.     if [ $JAODERNEIN = n ]
  2091.     then
  2092.       exit
  2093.     fi
  2094.  
  2095. 4) Numerische Vergleiche:
  2096.  
  2097.     echo Bitte geben Sie ihr Alter ein.
  2098.     read ALTER
  2099.     if [ $ALTER -ge 18 ]
  2100.     then
  2101.       echo Sie sind erwachsen.
  2102.     else
  2103.       if [ $ALTER -lt 14 ]
  2104.       then
  2105.         echo Du bist ein Kind.
  2106.         if [ $ALTER -lt 6 ]
  2107.         then
  2108.           echo Du hast geschummelt, mit $ALTER kann man noch nicht lesen.
  2109.         fi
  2110.       else
  2111.         echo Du bist ein Jugendlicher.
  2112.       fi
  2113.     fi
  2114.  
  2115. 5) Das Kommando keydef soll ausgeführt werden, aber nur, wenn es auch als in-
  2116.    ternes Kommando vorhanden ist.
  2117.  
  2118.     if [ keydef -t i ]
  2119.     then
  2120.       keydef F1 "dir"
  2121.     else
  2122.       echo keydef ist nicht vorhanden!
  2123.     fi
  2124.  
  2125. 6) Eine Art Neuimplementation des type-Kommandos, es wird der Typ des Kommandos
  2126.    $COM ausgegeben.
  2127.  
  2128.     if [ $COM -t f ]
  2129.     then
  2130.       echo $COM is a function
  2131.     fi
  2132.     if [ $COM -t i ]
  2133.     then
  2134.       echo $COM is a shell builtin
  2135.     fi
  2136.     (usw.)
  2137.  
  2138. 7) Feststellen, ob das Kommando upn extern oder intern ist:
  2139.  
  2140.     if [ upn -t sb ]
  2141.     then
  2142.       echo upn ist ein externes Kommando
  2143.     else
  2144.       echo upn ist intern oder Shellfunktion
  2145.     fi
  2146.  
  2147. 8) Testen, ob ein Shellscript unter der Okami-Shell ausgeführt wird:
  2148.  
  2149.     if [ +v OKAMISHELL ]
  2150.     then
  2151.       ...
  2152.     else
  2153.       echo Wasn das fürne Shell?
  2154.     fi
  2155.  
  2156. Siehe auch: test
  2157.         true
  2158.         false
  2159.         while
  2160.  
  2161. -----
  2162. indir - Kommando-Indirektion
  2163.  
  2164. Syntax: indir String
  2165.  
  2166. Der String wird ausgewertet (Shellvariablen expandiert, Command Substitution
  2167. durchgeführt etc.) und auf StdOut ausgegeben. String wird also insgesamt
  2168. zweimal ausgewertet: einmal bei der Eingabe des Kommandos und das Ergebnis
  2169. dieser Auswertung nochmal durch das indir-Kommando. Dies ist nützlich beim
  2170. Arbeiten mit Variablen, die andere Variablennamen beinhalten, für doppelte
  2171. Command Substitution usw.
  2172.  
  2173. Beispiele:
  2174.     VAR=hallo
  2175.     POINTER=VAR
  2176.     echo $POINTER            ergibt VAR
  2177.     echo ^$POINTER            ergibt $POINTER
  2178.     indir ^$POINTER            ergibt VAR
  2179.     echo ^$$POINTER            ergibt $VAR
  2180.     indir ^$$POINTER        ergibt hallo
  2181.  
  2182. ... also ein Zugriff auf den Inhalt der Variablen VAR ohne direkten Zugriff
  2183. auf VAR. indir entspricht also in dieser Verwendung ungefähr dem Pointer-
  2184. Konzept moderner Programmiersprachen.
  2185.  
  2186.     VAR=^`echo hallo^`
  2187.     echo $VAR            ergibt `echo hallo`
  2188.     indir $VAR, wie gehts            ergibt hallo, wie gehts
  2189.  
  2190. ... also indirekter Zugriff auf Shellkommandos, die z.B. in einer Shellvaria-
  2191. blen liegen. In obigem indir-Kommando wird zuerst $VAR zu `echo hallo` expan-
  2192. diert, und indir führt dann die Command Substitution aus.
  2193.  
  2194.     REVON='^033p'        speichern eines VT52-Codes
  2195.     echo $REVON        ergibt ^033p
  2196.     indir $REVON        führt den VT52-Code aus.
  2197.  
  2198. -----
  2199. keyb - Tastatur-Konfiguration
  2200.  
  2201. Syntax: keyb [-]
  2202. oder    keyb [(+|-)a] [(+|-)b] [(+|-)c] [-iInit] [-rRepeat] [-k]
  2203.  
  2204. Mit diesem Kommando wird die Tastatur konfiguriert. Folgende Konfigurationen
  2205. sind möglich:
  2206.     Das Auto-Repeat kann ein- und ausgeschaltet werden,
  2207.     Das Tastenklicken kann ein- und ausgeschaltet werden,
  2208.     Die Klingel bei Ausgabe von Ascii BEL (0x7) kann ein- und ausge-
  2209.     schaltet werden,
  2210.     Die Zeitspanne bis zum Einsetzen des Auto-Repeat und die Wieder-
  2211.     holrate können eingestellt werden,
  2212.     Der Tastaturpuffer kann gelöscht werden.
  2213. In der ersten Form, also beim Aufruf ohne Parameter oder nur mit einem
  2214. Minuszeichen, wird die Konfiguration ausgegeben. Wenn als Parameter ein
  2215. Minuszeichen angegeben ist, erfolgt die Ausgabe so, daß sie später wieder
  2216. als Parameter für keyb benutzt werden kann, z.B.:
  2217.     X=`keyb -`
  2218.     ....................... sonstige Kommandos
  2219.     keyb $X
  2220. speichert die Konfiguration und stellt sie danach wieder her.
  2221.  
  2222. Bei den Flags a, b und c bedeutet + einschalten und - ausschalten.
  2223.  
  2224.     a    Auto-Repeat ein/aus
  2225.     b    Ascii-BEL ein/aus
  2226.     c    Tastenklick ein/aus
  2227.  
  2228. Bei den Flags -i und -r wird die entsprechende Zeitspanne in 1/50 Sekunden
  2229. angegeben.
  2230.  
  2231.     -i    die Zeitspanne bis zum Einsetzen des Auto-Repeat,
  2232.     -r    die Zeitspanne zwischen zwei Wiederholungen.
  2233.  
  2234. Das Flag -k hat eine Sonderbedeutung: wenn es angegeben ist, löscht
  2235. keyb den Gemdos- und Bios-Tastaturpuffer. Diese Option kann benutzt
  2236. werden, um nach längeren Shellscripts evtl. gedrückte Tasten aus dem
  2237. Puffer zu entfernen.
  2238.  
  2239. ACHTUNG: bei diesem Kommando können die Flags nicht zu Gruppen zusammenge-
  2240. faßt werden, d.h.
  2241.     keyb -abc
  2242. ist falsch, es muß
  2243.     keyb -a -b -c
  2244. heißen.
  2245.  
  2246. Siehe auch:    cursor
  2247.         scr
  2248.         mouse
  2249.  
  2250. -----
  2251. keydef - Umdefinition der Tastatur
  2252.  
  2253. Syntax: keydef [+(n|s|c|a)] Scancode [Text|-]
  2254.     keydef clear|list|help
  2255.  
  2256. Mit diesem Kommando kann die Ausgabe aller Tasten umdefiniert werden. Es ist
  2257. damit möglich, jeder Taste neue Zeichenketten zuzuordnen, die beim Drücken
  2258. dieser Taste zu erzeugen sind. Damit kann man z.B. die Buchstabentasten um-
  2259. sortieren, aber auch die F-Tasten mit Funktionen belegen.
  2260.  
  2261. Jedes keydef-Kommando betrifft eine Taste, die durch den Scancode und die
  2262. Steuertaste bestimmt ist (z.B. Ctrl A etc.)
  2263.  
  2264. Wenn eins der Flags +n, +s, +c oder +a angegeben ist, bestimmt dieses, für
  2265. welche Steuertaste die Umdefinition wirkt. Es bedeuten:
  2266.     +n    keine Steuertaste
  2267.     +s    eine der Shift-Tasten
  2268.     +c    die Control-Taste
  2269.     +a    die Alternate-Taste
  2270. Wenn keins dieser Flags angegeben ist, wird +n angenommen.
  2271.  
  2272. Der Scancode kann in einem der folgenden Formate angegeben sein:
  2273.     1) ein Minuszeichen, gefolgt von einer Zahl; diese repräsentiert den
  2274.        gewünschten Scancode direkt.
  2275.     2) ein Schlüsselstring. Eine Liste der möglichen Schlüsselstrings
  2276.        finden Sie in dieser Datei unter dem Stichwort "keydefcode".
  2277.  
  2278. Wenn kein Text angegeben ist, wird die betreffende Tastendefinition (falls
  2279. vorhanden) ausgegeben.
  2280. Wenn der Text aus einem Minuszeichen besteht, wird die betreffende Tasten-
  2281. definition (falls vorhanden) gelöscht.
  2282. Ansonsten wird der Text als neue Tastendefinition gespeichert, eine evtl. be-
  2283. reits vorhandene Definition derselben Taste wird dabei überschrieben.
  2284.  
  2285. Wenn der Text Leerzeichen oder Sonderzeichen enthält, muß er in Anführungs-
  2286. zeichen eingeschlossen sein.
  2287.  
  2288. Wenn der Text mit einem Pluszeichen beginnt, wird, wenn in der Tastatur-
  2289. eingabe die betreffende Taste gedrückt wird, die Eingabezeile durch den Text
  2290. ersetzt (ansonsten wird der Text an die bisherige Eingabe angehängt).
  2291. Wenn der Text mit "^c" endet, wird nach Druck auf die betreffende Taste die
  2292. Eingabezeile ausgeführt.
  2293.  
  2294. Wenn der Text mit einem Ausrufezeichen beginnt, stellt er nicht einen durch
  2295. die Taste zu erzeugenden Ascii-String, sondern eine Umdefinition des durch
  2296. die Taste zu erzeugenden Shift-, Scan- und Ascii-Codes dar. Das Format
  2297. lautet
  2298.     ![+x]Scancode [Asciicode]
  2299. x ist dabei entweder n, s, c oder a und bewirkt die Steuertastenkombination.
  2300. Scancode wird wie oben beschrieben angegeben und ist der neue zu erzeugende
  2301. Scancode.
  2302. Asciicode ist ein einziges Zeichen, das den neuen Ascii-Code der Taste be-
  2303. schreibt.
  2304.  
  2305. Wenn als einziger Parameter "clear" angegeben ist, werden sämtliche Tasten-
  2306. definitionen gelöscht.
  2307. Wenn als einziger Parameter "list" angegeben ist, wird eine Liste aller vor-
  2308. handener Definitionen erzeugt, und zwar in Form von keydef-Kommandos.
  2309. Wenn als einziger Parameter "help" angegeben ist, wird eine Liste aller Scan-
  2310. code-Schlüsselstrings erzeugt.
  2311.  
  2312. Alle Umdefinitionen betreffen ausschließlich die Tastatureingabe der Shell.
  2313.  
  2314. Beispiele:
  2315.  
  2316. 1) Amerikanische Tastatur durch Vertauschen von y und z.
  2317.     keydef y z
  2318.     keydef z y
  2319.     keydef -s y Z
  2320.     keydef -s z Y
  2321.  
  2322.    Das jeweils erste y bzw. z ist die Angabe des umzudefinierenden Scancodes.
  2323.    Das zweite ist die Ascii-Zeichenkette, die durch die Taste erzeugt werden
  2324.    soll.
  2325.  
  2326. 2) Ausführen von "dir *.c" bei Druck auf F1:
  2327.     keydef f1 "+dir *.c^c"
  2328.  
  2329. 3) Ausgabe der Definition von Ctrl Help:
  2330.     keydef +c help
  2331.    oder:
  2332.        keydef +c -0x62
  2333.    Einmal wird die Help-Taste durch den Code-String "help" und einmal direkt
  2334.    durch den Scancode 0x62 angegeben.
  2335.  
  2336. 4) Löschen der Definition von Shift F5:
  2337.     keydef -s F5 -
  2338.  
  2339. 5) Ausgabe aller Tastendefinitionen in eine Datei:
  2340.     keydef list >keys.sh
  2341.    Die Datei keys.sh ist dann ein Shellscript, das, wenn es gestartet wird,
  2342.    alle Tastendefinitionen installiert.
  2343.  
  2344. 6) Ein Druck auf Shift-F6 soll dasselbe bewirken wie Help. Dafür wird der
  2345.    von F6 bewirkte Scancode auf den von Help umgebogen.
  2346.     keydef +s F6 "!help"
  2347.  
  2348. 7) Mit Ctrl-Esc wird die Shell beendet, Esc alleine löscht nur die Eingabe-
  2349.    zeile (übernimmt also die Funktion von Clr-Home), Clr-Home löscht den
  2350.    Bildschirm:
  2351.     keydef +c ESC "!+c D"
  2352.     keydef ESC "!CLR"
  2353.     keydef CLR "+cls ^c"
  2354.    Das erste keydef belegt Ctrl-Esc mit Ctrl-D, das zweite belegt Esc alleine
  2355.    mit der ursprünglichen Funktion der Clr-Home-Taste. Das dritte keydef
  2356.    sorgt dafür, daß bei Druck auf Clr-Home das Kommando cls ausgeführt
  2357.    wird.
  2358.    => Man kann alle vordefinierten Tastenfunktionen beliebig auf neue Tasten
  2359.    legen!!!!
  2360.  
  2361. 8) Ein Druck auf Undo soll ein Z eingeben.
  2362.     keydef undo "!Z z"
  2363.     keydef +s undo "!+s Z Z"
  2364.    Das erste keydef sorgt dafür, daß bei Druck auf Undo der Scancode von Z
  2365.    und der Ascii-Code von z benutzt wird. Das zweite keydef macht dasselbe
  2366.    für Shift Undo und erzeugt ein großes Z.
  2367.  
  2368. 9) Löschen aller Tastendefinitionen:
  2369.     keydef clear
  2370.  
  2371. Siehe auch:    keydefcode
  2372.  
  2373. -----
  2374. keydefcode - Code-Strings für Scancode-Angaben des keydef-Kommandos
  2375.   
  2376. Bei allen Codes ist die Groß/Kleinschreibung ohne Bedeutung. Es gilt:
  2377.     * Die Strings A bis Z und 0 bis 9 stehen für die jeweilige Buchstaben-
  2378.       bzw. Zahlentaste.
  2379.     * Die F-Tasten werden durch ein vorgestelltes F gekennzeichnet (z.B.
  2380.       F6, F10,...)
  2381.     * Tasten des Zehnerblocks sind durch ein vorgestelltes Z gekenn-
  2382.       zeichnet. Z5 ist also die 5 auf dem Zehnerblock.
  2383.  
  2384.     Code        Tastenaufschrift
  2385.     ----        ----------------
  2386.                         Alpha-Block
  2387.     ESC        Esc
  2388.     QUES        ß ?
  2389.     ACC        ' `
  2390.     HASH        # ^
  2391.     BS        Backspace
  2392.     TAB        Tab
  2393.     AT        @ Ü \
  2394.     PLUS        + *
  2395.     CR        Return (*)
  2396.     DEL        Delete
  2397.     OB        [ { Ö
  2398.     CB        ] } Ä
  2399.     TIL        ~ |
  2400.     LESS        < >
  2401.     COMMA        , ;
  2402.     DOT        . :
  2403.     MINUS        - _
  2404.     SPC        die Leertaste
  2405.                         Cursor-Block
  2406.     UNDO        Undo
  2407.     HELP        Help
  2408.     INS        Insert
  2409.     CLR        Clr Home
  2410.     UPAR        Pfeil auf
  2411.     DNAR        Pfeil ab
  2412.     LTAR        Pfeil nach links
  2413.     RTAR        Pfeil nach rechts
  2414.                         Zehnerblock
  2415.     ZMINUS        -
  2416.     ZPLUS        +
  2417.     ZOP        (
  2418.     ZCP        )
  2419.     ZSLASH        /
  2420.     ZAST        *
  2421.     ZDOT        .
  2422.     ZCR        Enter (*)
  2423.  
  2424.  
  2425. (*) Eine Umdefinition dieser Tasten ist zwar möglich, aber bei der Tastatur-
  2426. eingabe ohne Wirkung.
  2427.  
  2428. -----
  2429. logo - Das Okami-Logo ausgeben
  2430.  
  2431. Syntax:    logo [x [y]]
  2432.  
  2433. Das Okami-Logo wird an die Bildschirmkoordinaten x,y gezeichnet. Die Default-
  2434. werte von x und y sind 0. x muß ein Vielfaches von 32 sein.
  2435. Bei nicht-monochromer Bildauflösung, wenn also nicht jedem Pixel ein Bit im
  2436. Bildschirmspeicher zugeordnet ist, erzeugt dieses Kommando keine Ausgabe.
  2437. In diesem Fall wird -1 zurückgegeben.
  2438. Zu große oder zu kleine Werte von x und y werden auf die jeweiligen Maximal-
  2439. werte der Bildschirmauflösung gesetzt.
  2440. Um Konflikte mit dem Cursor-Blinken zu vermeiden, sollte, wenn das Logo über
  2441. die aktuelle Cursorposition geschrieben wird, vorher der Cursor mit cursor -v
  2442. unsichtbar gemacht werden.
  2443.  
  2444. -----
  2445. ls - Dateien auflisten
  2446.  
  2447. Syntax: ls [-adlfkCvi] [-xtbnr] {Filespec}
  2448.     ls -! Filespec {Filespec}
  2449.  
  2450. Gibt eine Liste aller Dateien, deren Namen auf Filespec passen, nach StdOut
  2451. aus. Filespec nicht angegeben bedeutet .\* (alle Dateien im aktuellen Direc-
  2452. tory).
  2453. Die Namen von Ordnern werden in [] (eckige Klammern) eingefasst.
  2454. Die Namen von ausfuerbaren Dateien werden in <> (spitze Klammern) eingefasst.
  2455. Flags:
  2456.     -a    Auch versteckte und System-Dateien werden ausgegeben.
  2457.     -d    Wenn Filespec der Name eines Ordners ist, wird der Ordner
  2458.         selber und nicht sein Inhalt ausgegeben.
  2459.     -l    Angaben ueber Dateiattribute, Dateilaenge und Datei-
  2460.         datum und -zeit werden ausgegeben. Außerdem werden am Ende
  2461.         der Liste die Summe aller Dateilängen und die Anzahl der
  2462.         Dateien ausgegeben (bei mehr als einer Datei). Siehe unten (*).
  2463.     -f    Gibt bei -l bei den Dateiattributen mit aus, ob eine aus-
  2464.         führbare Datei schnellgeladen wird. Siehe unten (*). Ist ohne
  2465.         Wirkung, wenn -l nicht angegeben ist.
  2466.     -k    Keine [] und <> um Dateinamen.
  2467.     -C    Die Dateien werden in mehreren Spalten ausgegeben.
  2468.     -v    Es wird nur der Diskettenname ausgegeben.
  2469.     -i    Zu jeder Datei wird anhand einer Indexdatei eine Erklärung
  2470.         ausgegeben. siehe unten (**).
  2471.     -x    Die Dateien werden nach Extendern sortiert ausgegeben.
  2472.     -t    Die Dateien werden nach dem Anlagezeitpunkt der Datei
  2473.         sortiert ausgegeben (die älteste Datei zuerst).
  2474.     -b    Die Dateien werden nach ihrer Länge sortiert ausge-
  2475.         geben (die kürzeste Datei zuerst).
  2476.     -n    Die Dateien werden in der Reihenfolge ausgegeben, in der
  2477.         sie physikalisch gespeichert sind. -r ist ohne Wirkung.
  2478.     -r    Die Reihenfolge der Dateien wird umgekehrt (außer bei -n).
  2479.  
  2480. (*) Anmerkung zu -l und -f:
  2481. Die Dateiattribute werden analog dem chmod-Kommando ausgegeben. Für ein ge-
  2482. setztes Attribut erscheint der entsprechende Buchstabe, für ein nicht ge-
  2483. setztes erscheint ein Minuszeichen.
  2484. Wenn die Datei ausführbar ist, erscheint als letztes ein x. Über die Ausführ-
  2485. barkeit entscheidet der Dateinamen-Extender und die Shellvariablen XEXT und
  2486. GEXT.
  2487. Wenn das Flag -f angegeben ist, wird bei ausführbaren Programmdateien fest-
  2488. gestellt, ob das Fastload-Bit im Programmheader gesetzt ist. Wenn das der
  2489. Fall ist, wird statt dem x ein f ausgegeben.
  2490. Wenn -f nicht angegeben ist, wird das Fastload-Bit nicht beachtet. Das ist so,
  2491. da, um das Fastload-Bit zu ermitteln, auf die Datei selber (und nicht nur auf
  2492. den Directory-Eintrag) zugegriffen werden muß, was die Ausgabe von ls be-
  2493. sonders bei Disketten sehr verlangsamt.
  2494.  
  2495. (**) Anmerkung zu -i:
  2496. Wenn sich in demselben Directory wie die auszugebenden Dateien eine Datei
  2497. namens `_index' befindet, so wird diese, wenn das Flag -i angegeben ist,
  2498. eingelesen. Diese Datei enthält erklärende Anmerkungen zu den einzelnen
  2499. Dateien des Directories, in dem sie sich befindet, und zwar in dem folgenden
  2500. Format:
  2501.     - Leerzeilen und Zeilen, die mit einem Doppelkreuz beginnen, sind
  2502.       Kommentarzeilen.
  2503.     - Alle anderen Zeilen haben die Form
  2504.         Pattern Text
  2505.  
  2506. Hierbei ist `Pattern' ein Muster nach den Regeln der erweiterten Wildcards,
  2507. das `Text' als den auszugebenden Text für alle Dateien, die auf `Pattern'
  2508. passen, festlegt. Leerzeichen am Anfang und Ende der Zeile werden ignoriert,
  2509. Text selber darf Leerzeichen enthalten. Pattern und Text müssen durch
  2510. mindestens ein Leerzeichen getrennt sein. Beispiel: die Zeile
  2511.     *.c C-Quellcode
  2512. legt den Text "C-Quellcode" für alle C-Dateien fest.
  2513. Achtung: für eine Datei ist die _index-Datei zuständig, die sich in demselben
  2514. Directory wie die Datei befindet. Bei `ls -i ../abc/*.c' würde also die Datei
  2515. `../abc/_index' benutzt.
  2516. Sinn dieser Sache ist weniger, Dateien zu klassifizieren, als vielmehr indi-
  2517. viduelle Erklärungstexte zu den einzelnen Dateien schreiben zu können. Daher
  2518. wird auch in jedem Directory eine eigene Indexdatei verwaltet.
  2519.  
  2520. Wenn keins der Flags -x, -t, -b, -n angegeben ist, werden die Dateien nach
  2521. dem Dateinamen sortiert ausgegeben (in aufsteigender Reihenfolge). Dann
  2522. und bei -x erscheinen die Ordner nach den Dateien.
  2523.  
  2524. Wenn als erstes Flag -! angegeben ist, werden alle folgenden Angaben als
  2525. Dateispezifikationen betrachtet und von den betreffenden Dateien Attribute
  2526. (binär), Datum und Uhrzeit (hexadezimal), Dateigröße (dezimal) und der voll-
  2527. ständige Dateiname ausgegeben, und zwar in der physikalischen Reihenfolge.
  2528. Es können keine anderen Flags mit -! benutzt werden. Diese Option dient zu
  2529. Debug-Zwecken der Shell.
  2530.  
  2531. Beispiele:
  2532. 1) Liste aller Dateien im aktuellen Verzeichnis, Ausgabe in mehreren
  2533.    Spalten:
  2534.     ls -C
  2535.  
  2536. 2) Liste aller C-Quelldateien im aktuellen Verzeichnis, sortiert nach
  2537.    Anlagedatum, die jüngste Datei zuerst:
  2538.     ls -tr *.c
  2539.  
  2540. 3) Liste aller .PRG-Dateien im Ordner d:\shell mit Dateiattributen, Datei-
  2541.    länge und -Datum:
  2542.     ls -l d:\shell\*.prg
  2543.  
  2544. 4) Liste aller Dateien im Ordner d:\shell mit Attributen, Länge und Datum,
  2545.    sortiert nach Dateilänge:
  2546.     ls -l -b d:\shell
  2547.  
  2548. 5) Liste von Attributen, Länge und Datum des Ordners d:\shell:
  2549.     ls -ld d:\shell
  2550.  
  2551. 6) Ausgabe des Diskettennamens von Diskette A:
  2552.     ls -v A:\
  2553.  
  2554.  
  2555. Rückgabewert:
  2556.     -1    Aufruffehler
  2557.     sonst    die Anzahl der ausgegebenen Dateien.
  2558.  
  2559. Siehe auch:    chmod
  2560.  
  2561. -----
  2562. man - Online-Hilfe ausgeben
  2563.  
  2564. Syntax: man [Kommando]
  2565.  
  2566. Dies ist der Kommandozeilen-Zugriff auf das Online-Manual der Shell. Ent-
  2567. spricht der Eingabe von "Kommando" und einem Druck auf die Help-Taste.
  2568. Siehe okami.doc für weitere Details.
  2569.  
  2570. -----
  2571. mem - Freien Hauptspeicher ermitteln
  2572.  
  2573. Syntax: mem [-b]
  2574.  
  2575. Wenn kein Flag angegeben ist, wird die Anzahl der freien RAM-Bytes (genauer:
  2576. die Länge des längsten zusammenhängenden Blocks) ausgegeben.
  2577. Wenn das Flag -b angegeben ist, wird die Größe der Speicherbänke 0 und 1 sowie
  2578. die Gesamtgröße des RAM-Speichers ausgegeben.
  2579.  
  2580. -----
  2581. memex - Hauptspeicher auslesen
  2582.  
  2583. Syntax: memex [-acwls] Startadr [Anzahl]
  2584.  
  2585. Kopiert eine Anzahl von Speicherstellen nach StdOut. Falls Anzahl nicht
  2586. angegeben ist, wird Anzahl=1 gesetzt.
  2587.  
  2588. Flags:    -s    Vor dem Auslesen wird der Prozessor in den Supervisor-Modus
  2589.         versetzt. Dies ist sinnvoll beim Auslesen von System-
  2590.         adressen.
  2591.     -a    Liest Anzahl Bytes von Startadr an und gibt die Inhalte
  2592.         als Ascii-Zeichen aus. Bei nicht-druckbaren Zeichen werden
  2593.         die entsprechenden Ascii-Codes (z.B. NUL, SOH etc.) ausge-
  2594.         geben.
  2595.     -c    Liest Anzahl Bytes von Startadr an und gibt die Inhalte
  2596.         numerisch (im Bereich 0...0xff) aus.
  2597.     -w    Liest Anzahl Worte (je 16 bits) von Startadr an und gibt
  2598.         die Inhalte numerisch (im Bereich 0...0xffff) aus.
  2599.     -l    Liest Anzahl Langworte (je 32 bits) von Startadr an und
  2600.         gibt die Inhalte numerisch (im Bereich 0...0xffffffff)
  2601.         aus.
  2602.     Wenn keins von -a, -c, -w, -l angegeben ist, werden Anzahl Bytes
  2603.     von StartAdr an nach StdOut kopiert.
  2604.     Wenn bei -w oder -l eine ungerade Adresse angegeben ist, wird diese
  2605.     vor Benutzung dekrementiert.
  2606.  
  2607. Beispiele:
  2608. 1. Ermitteln der Anzahl der angeschlossenen Diskettenlaufwerke durch Aus-
  2609.    lesen der betreffenden System-Speicherstelle:
  2610.    memex -s -w 0x4a6
  2611. 2. Ausgeben von 100 Bytes von Speicherstelle 0x12345 an als Hexdump:
  2612.    memex 0x12345 100 | hd
  2613.  
  2614. -----
  2615. mkdir - Ordner erzeugen
  2616.  
  2617. Syntax: mkdir [-r] Ordner {Ordner}
  2618.  
  2619. Erzeugt die angegebenen Ordner. Wenn das Flag -r angegeben ist, werden voll-
  2620. ständige Pfade erzeugt, ansonsten nur die zuletzt angegebenen Ordner.
  2621. Achtung: wenn -r angegeben ist, wird der Basisname als der Name einer Datei
  2622. betrachtet und nicht angelegt. Um auch den Basisnamen als Ordner anzulegen,
  2623. muß er mit einem Backslash (oder Slash) abgeschlossen sein.
  2624.  
  2625. Beispiel:
  2626.     mkdir c:/work/test
  2627.             erzeugt den Ordner test als Unterordner von c:/work;
  2628.             wenn c:/work noch nicht existiert, kommt ein Fehler.
  2629.     mkdir -r c:/work/test/data
  2630.             erzeugt die Ordner c:/work und c:/work/test, falls
  2631.             noch nicht vorhanden. Eine Datei oder Ordner namens
  2632.             data wird nicht angelegt.
  2633.     mkdir -r c:/work/test/data/
  2634.             erzeugt die Ordner c:/work, c:/work/test und
  2635.             c:/work/test/data, falls noch nicht vorhanden.
  2636.     FILE=d:/data/files/x.out
  2637.     mkdir -r $FILE
  2638.             legt alle Ordner an, die für die Datei $FILE be-
  2639.             nötigt werden, also den Pfad d:/data/files. Die Datei
  2640.             x.out wird nicht angelegt. Nach diesem Kommando
  2641.             können z.B. Ausgaben nach $FILE umgeleitet werden.
  2642.  
  2643. Rückgabewert: Anzahl der erzeugten Ordner (oder Pfade bei -r).
  2644.  
  2645. -----
  2646. more - SIEHE pg
  2647.  
  2648. -----
  2649. mouse - Die Maus konfigurieren und abfragen
  2650.  
  2651. Syntax: mouse [+|-] [Form] [XVar [YVar]]
  2652.  
  2653. Dieses Kommando dient zwei verschiedenen Zwecken: 1) der Konfiguration
  2654. des Mauszeigers und 2) der Abfrage der Mauskoordinaten. Das Kommando muß
  2655. mit mindestens einem Parameter aufgerufen werden, es können aber alle
  2656. der möglichen Parameter gleichzeitig benutzt werden.
  2657. Es handelt sich hierbei um die Benutzung von AES-Funktionen, weswegen vor
  2658. Benutzung von mouse die Shell als Applikation bei GEM angemeldet werden
  2659. muß. Dies geschieht mit dem Kommando gon.
  2660.  
  2661. Parameter:
  2662.     +    der Mauszeiger wird sichtbar gemacht.
  2663.     -    der Mauszeiger wird unsichtbar gemacht.
  2664.     Form    es wird die Form des Mauszeigers eingestellt. Anstelle von
  2665.         Form steht eine Zahl zwischen 0 und 7, es bedeuten:
  2666.         0    Pfeil
  2667.         1    Cursor (Klammer)
  2668.         2    Biene
  2669.         3    Hand mit Zeigefinger
  2670.         4    flache Hand
  2671.         5    dünnes Fadenkreuz
  2672.         6    dickes Fadenkreuz
  2673.         7    umrahmtes Fadenkreuz
  2674.     XVar    der Name der Variablen, in die die x-Koordinate der Maus
  2675.         gespeichert werden soll. Anstelle von XVar steht ein belie-
  2676.         biger Variablenname außer den Ziffern 0 bis 7 (die als
  2677.         Variablennamen vom Benutzer ohnehin nicht verändert werden
  2678.         sollten.)
  2679.     YVar    analog für die y-Koordinate.
  2680.  
  2681. Beispiel:
  2682.     mouse + 0
  2683.         Der Mauszeiger wird sichtbar und auf einen Pfeil eingestellt.
  2684.     mouse X Y
  2685.     echo Die Mauskoordinaten sind $X und $Y
  2686.         Abfrage der Mauskoordinaten.
  2687.  
  2688. ACHTUNG: Die Einstellung der Maus erfolgt mit der AES-Funktion graf_mouse.
  2689. AES verwaltet das Ein- und Ausschalten der Maus in einem Puffer, d.h. wenn
  2690. die Maus dreimal ausgeschaltet wird, muß sie auch dreimal wieder eingeschal-
  2691. tet werden, bevor sie sichtbar wird. Da mehrfaches Einschalten der Maus zu
  2692. Verwirrungen bei GEM-Formularen führen kann, sollte man hier mit großer
  2693. Vorsicht vorgehen. Wenn es zu Problemen kommt, hilft jedoch meistens die
  2694. Rückkehr zum Desktop.
  2695. Die Mauskoordinaten werden mit der AES-Funktion graf_mkstate bestimmt.
  2696. Erfahrungsgemäß führt dies regelmäßig zu falschen Werten, da das Bildschirm-
  2697. scrolling die Mauskoordinaten beeinflußt. Zuverlässig sind die Werte zu-
  2698. mindest nach einem cls.
  2699.  
  2700. Siehe auch:    cursor
  2701.         keyb
  2702.         scr
  2703.  
  2704. -----
  2705. mv - Dateien umbenennen oder verschieben
  2706.  
  2707. Syntax: mv [-avif] Source {Source} Dest
  2708.  
  2709. Wenn Dest der Name eines existierenden Ordners ist, werden alle Dateien
  2710. Source in diesen Ordner verschoben. Der neue Dateiname der Dateien ist dann
  2711. Dest/`basename Source`.
  2712. Wenn Dest nicht der Name eines existierenden Ordners ist, wird die Datei
  2713. Source in die Datei Dest umbenannt. In diesem Fall darf nur ein Source an-
  2714. gegeben sein.
  2715. Die Source-Angaben dürfen erweiterte Wildcards enthalten. Die Maximalanzahl
  2716. der auf diese Weise benutzbaren Source-Dateien ist 100.
  2717. Source und Dest können in verschiedenen Ordnern und auf verschiedenen Lauf-
  2718. werken liegen. Beim Verschieben auf einem Laufwerk werden keine Daten außer
  2719. den Directoryeinträgen bewegt, wodurch das Verschieben sehr schnell geht.
  2720. Beim Verschieben auf ein anderes Laufwerk werden die Dateien mit cp kopiert
  2721. und dann die Sourcedateien gelöscht.
  2722. Ab TOS 1.4 können mit diesem Kommando auch die Namen von Ordnern geändert
  2723. werden. Es können allerdings keine Ordner verschoben werden.
  2724.  
  2725. Flags:
  2726.     -a    Die Quelldatei wird an die Zieldatei angehängt.
  2727.     -v    Bei jeder bearbeiteten Datei wird eine Meldung ausgegeben.
  2728.         Das ist nützlich beim Kopieren von vielen Dateien auf einmal.
  2729.     -i    Fragt vor dem Überschreiben bereits vorhandener Zieldateien
  2730.         nach, ob diese überschrieben werden dürfen.
  2731.     -f    Überschreibt keine bereits vorhandenen Dateien.
  2732.  
  2733. Beispiele:
  2734. mv sh.ttp sh.prg        Umbenennen einer Datei.
  2735. mv sh.ttp d:/shell        Verschieben einer Datei in einen Ordner, der
  2736.                 neue Name ist d:/shell/sh.ttp.
  2737. mv e:/source/*.c a:/        Verschieben aller C-Dateien auf die Diskette.
  2738. mv -f e:/source/*.c a:/        dito, aber es werden keine Dateien über-
  2739.                 schrieben.
  2740. mv docs anleitg            Ändern eines Ordnernamens, nur bei >=TOS1.4.
  2741.  
  2742. Siehe auch:    cp
  2743.  
  2744. -----
  2745. num - Zahlen in verschiedenen Zahlensystemen ausgeben
  2746.  
  2747. Syntax: num [-bodhxa] Zahl {Zahl}
  2748.  
  2749. Die Zahlen werden in binärer, oktaler, dezimaler und hexadezimaler Form 
  2750. sowie als Ascii-Zeichen ausgegeben. Wenn das entsprechende Ascii-Zeichen
  2751. nicht druckbar ist, wird die Bezeichnung des Zeichens (z.B. NUL, SOH etc.)
  2752. ausgegeben.
  2753.  
  2754. Flags:    -b    Die Zahlen werden nur im Binärsystem ausgegeben.
  2755.     -o    Die Zahlen werden nur im Oktalsystem ausgegeben.
  2756.     -d    Die Zahlen werden nur im Dezimalsystem ausgegeben.
  2757.     -h    Die Zahlen werden nur im Hexadezimalsystem ausgegeben.
  2758.     -x    Wie -h.
  2759.     -a    Die Zahlen werden nur als Ascii-Zeichen ausgegeben.
  2760.  
  2761. Beispiele: 
  2762.  
  2763. 1) Ausgabe von 123 (dezimal) in allen Zahlensystemen:
  2764.         num 123
  2765.  
  2766. 2) Ausgabe von 123 (hex) in allen Zahlensystemen:
  2767.         num 0x123
  2768.  
  2769. 3) Ausgabe von -123 (dezimal) in Hex:
  2770.         num -x "-123"
  2771.    und NICHT: num -x -123
  2772.  
  2773. 4) Ausgabe der Konsolkonfigurationsbits durch Auslesen einer Systemadresse
  2774.    und Umformung ins Binärsystem:
  2775.         memex -sc 0x484 | xargs num -b
  2776.  
  2777.  
  2778. -----
  2779. overscan - OverScan ein- und ausschalten
  2780.  
  2781. Syntax: overscan [+|-]
  2782.  
  2783. Dieses Kommando dient zum Umschalten von OverScan und kann daher nur
  2784. sinnvoll eingesetzt werden, wenn OverScan samt der zugehörigen Software
  2785. installiert ist. Das Verwenden ohne OverScan ist allerdings trotzdem
  2786. gefahrlos möglich.
  2787. Wenn + angegeben ist, wird in den OverScan-Modus geschaltet. Wenn - ange-
  2788. geben ist, wird in den Normalmodus geschaltet. Wenn kein OverScan installiert
  2789. ist, ist diese Art des Aufrufes ohne Wirkung.
  2790. Wenn kein Parameter angegeben ist, wird + oder - ausgegeben, je nachdem ob
  2791. der OverScan- oder der Normalmodus aktiv ist. Wenn kein OverScan installiert
  2792. ist, wird - ausgegeben.
  2793.  
  2794. Beispiel:
  2795. Während der Ausführung eines Programms soll auf Normalmodus geschaltet werden.
  2796.  
  2797.     # Modus speichern
  2798.     MODE=`overscan`
  2799.     # umschalten
  2800.     overscan -
  2801.       ............................ Aufruf des Programms
  2802.     # Modus wiederherstellen
  2803.     overscan $MODE
  2804.     unset MODE
  2805.  
  2806. Der Rückgabewert ist 0, wenn der Normalmodus-, und 1, wenn der OverScan-Modus
  2807. aktiv ist, und -1 bei einem Aufruffehler. Wenn + oder - angegeben ist, wird
  2808. 1 oder 0 je nach der Einstellung vor der Umschaltung (also vor Aufruf des
  2809. Kommandos) ausgegeben.
  2810.  
  2811. -----
  2812. pg, more - Dateien seitenweise ausgeben
  2813.  
  2814. Syntax: pg|more {File}
  2815.  
  2816. StdOut oder, falls angegeben, File wird in Seiten zu je $PAGELEN Zeilen
  2817. ausgegeben. Nach jeder Seite kann der Anwender:
  2818.     mit der Leertaste die nächste Seite anzeigen,
  2819.     mit der Taste D die nächste halbe Seite anzeigen,
  2820.     mit der RETURN-Taste die nächste Zeile anzeigen,
  2821.     mit der Taste Q die Ausgabe abbrechen und mit der nächsten Datei
  2822.         fortfahren,
  2823.     mit der ESC-Taste das Kommando abbrechen, es werden keine weiteren
  2824.         Dateien mehr angezeigt.
  2825.  
  2826. -----
  2827. pmd - Post-Mortem-Dump
  2828.  
  2829. Syntax: pmd
  2830.  
  2831. Dieses Kommando kann verwendet werden, um Informationen über ein Programm zu
  2832. erhalten, das von einer Exception durch Bomben beendet wurde. Es erzeugt eine
  2833. Ausgabe, die die Inhalte der Register d0 bis d7 und a0 bis a6 sowie des
  2834. usp (a7), ssp (a7") und des Programmzählers (pc) enthält. Außerdem wird die
  2835. Nummer der die Bomben auslösenden Exception ausgegeben und die obersten sechs
  2836. 16bit-Worte des Stacks, letztere sowohl in Hex- als auch in Ascii-Notation.
  2837. Nicht-druckbare Zeichen (solche mit Ascii-Code<32) werden als dicke Punkte
  2838. ausgegeben.
  2839. Die Nummer der Exception wird dezimal, alle anderen Angaben hexadezimal an-
  2840. gegeben. (Da die Nummer der Exception normalerweise kleiner als 10 ist,
  2841. macht es keinen Unterschied, ob man sie dezimal oder hexadezimal ausgibt.)
  2842.  
  2843. Wenn noch keine Exception aufgetreten ist, durch die Bomben hervorgerufen
  2844. wurden, sind die Informationen ungültig. Es erscheint dann vor der Ausgabe
  2845. die Meldung "WARNING: Information void".
  2846.  
  2847. -----
  2848. ps - Prozeßliste
  2849.  
  2850. Syntax: ps [-bfc]
  2851.  
  2852. WENN MINT INSTALLIERT IST:
  2853. Es wird eine Liste der augenblicklich aktiven Prozesse erzeugt. Dabei handelt
  2854. es sich um eine Ausgabe des Inhalts von Pseudo-Laufwerk X:.
  2855. Die Ausgabe hat folgendes Format:
  2856.  
  2857. 000  WEV    00:00:00   4096        mint
  2858.  
  2859. Dabei ist:
  2860.     000        Die Prozeßnummer.
  2861.     WEV        Der Prozeßstatus. Siehe unten.
  2862.     00:00:00    Die Laufzeit des Prozesses.
  2863.     4096        Der Speicherbedarf des Prozesses in Bytes.
  2864.     mint        Der Name des Prozesses.
  2865.  
  2866. In diesem Fall wäre der Dateiname des Prozesses also X:\mint.000 .
  2867. Folgende Statusangaben sind möglich:
  2868.     RUN    Der Prozeß ist augenblicklich aktiv.
  2869.     RDY    Der Prozeß ist inaktiv, aber bereit, aktiv zu werden.
  2870.     TRS    Der Prozeß wurde beendet, ist aber noch resident.
  2871.     WEV    Der Prozeß wartet auf ein Ereignis (z.B. auf das Ende eines
  2872.         Kindprozesses).
  2873.     WIO    Der Prozeß wartet auf eine Ein/Ausgabe.
  2874.     ZOM    Es ist ein Zombie-Prozeß.
  2875.     STP    Der Prozeß wurde durch ein Signal beendet.
  2876.  
  2877. Die ps übergebenen Parameter und Flags werden ignoriert.
  2878.     
  2879.  
  2880. WENN MINT NICHT INSTALLIERT IST:
  2881. Das Kommando ps erzeugt eine Liste der augenblicklich laufenden Programme
  2882. (Prozesse). Anders als unter Unix, wo mehrere Prozesse gleichzeitig aktiv
  2883. sein können, ist unter TOS nur jeweils ein Prozeß aktiv. Dieser kann ein
  2884. anderes Programm starten und auf dessen Beendigung warten (mit der Be-
  2885. triebssystem-Funktion Pexec). Das so gestartete Programm kann wiederum
  2886. ein anderes starten usw. Mit ps wird die so erzeugte Reihe von Programmen
  2887. ausgegeben.
  2888. Nach Eingabe von ps erscheint eine Liste der Prozesse in der Reihenfolge
  2889. des Aufrufs. Der augenblickliche Prozeß steht oben, der zuerst vom Desk-
  2890. top gestartete Prozeß steht unten. Das Desktop selber erscheint nicht in
  2891. der Liste.
  2892.  
  2893. Flags:
  2894.     -b    Zu jedem Prozeß wird die Adresse von dessen Basepage aus-
  2895.         gegeben.
  2896.     -f    Wenn dieses Flag angegeben ist, erscheinen die vollen
  2897.         Pfadnamen, unter denen die Programme aufgerufen wurden.
  2898.         Wenn -f nicht angegeben ist, erscheint nur der reine
  2899.         Dateiname (Basisname).
  2900.     -c    Zu jedem Prozeß wird dessen Kommandozeile ausgegeben.
  2901.         VORSICHT: arbeitet unzuverlässig, da bei Programmstart die
  2902.         DTA auf diesen Bereich zeigt. Programme, die die DTA nicht
  2903.         selber ändern, überschreiben bei jedem DTA-Zugriff diesen
  2904.         Bereich.
  2905.  
  2906. Der Kern des ps-Kommandos, nämlich der Schritt von der Adresse der Basepage
  2907. zum Aufrufpfad des zugehörigen Programms, stammt aus der Datei initargs.c
  2908. aus der Library des Sozobon C-Systems.
  2909.  
  2910. ACHTUNG: Die einzige Angabe, auf die man sich verlassen kann, ist die
  2911. Adresse der Basepage. Da TOS den Aufrufpfad eines Programms nicht in
  2912. der Basepage abspeichert, benutzt ps einen Trick: es holt mit Hilfe der
  2913. Basepage-Adresse die gespeicherte Adresse des USP (User-Stack-Pointer) des
  2914. jeweiligen Programms und bekommt über diese den ersten Parameter der zu-
  2915. letzt aufgerufenen Funktion. Dies ist in jedem Fall Pexec, daher ist der
  2916. erste Parameter der Pfadname des aufgerufenen Programms. (Dieser Trick stammt
  2917. aus den Libraries von Sozobon C.) Das kann natürlich schiefgehen, man sollte
  2918. sich also über nichts wundern.
  2919. Teilweise werden die Aufrufpfade durch das Starten von externen Kommandos
  2920. verändert. Beim Programmstart wird die Kommandozeile als DTA benutzt, wenn
  2921. ein Programm also seine DTA nicht ändert, wird die Kommandozeile beim ersten
  2922. Aufruf von Fsfirst überschrieben.
  2923.  
  2924. Siehe auch:    basep
  2925.  
  2926. -----
  2927. putscr - Bildschirminhalt wiederherstellen
  2928.  
  2929. Syntax: putscr [-(f|s Dateiname)]
  2930.  
  2931. Ein zuvor mit getscr gespeicherter Bildschirminhalt wird wiederhergestellt.
  2932. Es ist möglich, einen einmal gespeicherten Bildschirm mehrmals zu restau-
  2933. rieren.
  2934.  
  2935. Flags:
  2936.     -f    Der Speicherbereich wird freigegeben. Das Bild wird nicht
  2937.         wiederhergestellt.
  2938.     -s    Der Speicherbereich wird in die angegebene Datei gespeichert.
  2939.         Wenn eine Datei mit dem angegebenen Namen bereits existiert,
  2940.         wird sie überschrieben.
  2941.  
  2942. Beispiel:
  2943.     getscr - titel.doo
  2944.     putscr
  2945.     read
  2946.     cls
  2947.     putscr -f
  2948.             Mit dieser Befehlsfolge wird ein Doodle-Bild (32000
  2949.             Bytes) aus der Datei titel.doo geladen und angezeigt.
  2950.             Die Shell wartet auf einen Tastendruck, dann wird der
  2951.             Bildschirm gelöscht und der Speicherbereich wieder
  2952.             freigegeben.
  2953.             Mit dieser Befehlsfolge kann ein Shellscript, z.B.
  2954.             das Profile, eine Grafik als Titelbild ausgeben.
  2955.  
  2956.     getscr
  2957.     putscr -s shell.doo
  2958.     putscr -f
  2959.             Der aktuelle Bildschirminhalt wird im Doodle-Format
  2960.             in die Datei shell.doo gespeichert (Hardcopy).
  2961.  
  2962.  
  2963. Siehe auch: getscr
  2964.         showpic (externes Kommando)
  2965.  
  2966. -----
  2967. pwd - Aktuelles Directory ermitteln
  2968.  
  2969. Syntax: pwd [-a|{Drive}]
  2970.  
  2971. Schreibt das aktuelle Verzeichnis der angegebenen Laufwerke oder, wenn
  2972. kein Laufwerk angegeben ist, das aktuelle Verzeichnis des aktuellen
  2973. Laufwerks nach StdOut. Wenn -a angegeben ist, werden die aktuellen Verzeich-
  2974. nisse aller angeschlossenen Laufwerke ausgegeben.
  2975. pwd ohne Laufwerksangabe entspricht "echo $CWD".
  2976.  
  2977. Beispiele:
  2978.     pwd A: B: C: D: E: F:    ist äquivalent zu
  2979.     pwd abcdef        oder, wenn das alle Laufwerke sind, zu
  2980.     pwd -a
  2981.  
  2982. -----
  2983. raw - Ausgabe auf der "Raw Console"
  2984.  
  2985. Syntax: raw [-bnc] {Datei}
  2986.  
  2987. Als "Raw Console" oder RAWCON wird der Bildschirm ohne VT52-Emulator und
  2988. Steuerzeicheninterpretation bezeichnet. Die Ausgabe eines CR-Zeichens nach
  2989. RAWCON erzeugt also kein Zeilenende, sondern das "CR"-Schriftzeichen. Mit
  2990. dem Kommando raw kann eine Datei (oder StdIn, wenn keine Datei angegeben
  2991. ist) auf RAWCON ausgegeben werden. Am Ende der Datei wird jedoch ein
  2992. Zeilenvorschub eingefügt, damit das nächste Prompt in einer neuen Zeile
  2993. erscheint. Das kann mit dem Flag -c unterbunden werden.
  2994.  
  2995. Flags:    -b    die Datei wird binär geöffnet, es findet also keine Über-
  2996.         setzung CR/LF -> LF statt.
  2997.     -n    alle CR-Zeichen werden statt über RAWCON über den VT52-
  2998.         emulator ausgegeben, bewirken also tatsächliche Zeilen-
  2999.         vorschübe. Alle anderen Zeichen werden nicht übersetzt.
  3000.     -c    die Ausgabe eines Zeilenvorschubs am Ende jeder Datei
  3001.         wird unterbunden.
  3002.  
  3003. Beispiele:
  3004.  
  3005.     raw cmds2.o cmds3.o cmds4.o
  3006. gibt die angegebenen Dateien auf RAWCON aus. An Ende jeder Datei wird ein
  3007. Zeilenvorschub erzeugt.
  3008.  
  3009.     hd -b data.bin | raw -n
  3010. Der Hexdump wird auf RAWCON ausgegeben. CR-Zeichen im Hexdump bewirken
  3011. tatsächliche Zeilenvorschübe in der Ausgabe.
  3012.  
  3013. Bemerkung:
  3014. 1) Die Ausgabe erfolgt mit der Bios-Funktion Bconout.
  3015. 2) Dieses Kommando erzeugt keine Ausgabe nach StdOut, kann also nicht
  3016. umgeleitet werden.
  3017.  
  3018. -----
  3019. rdti - Konfiguration der Shell mittels desktop.inf
  3020.  
  3021. Syntax: rdti [-dclxv] [Datei]
  3022.  
  3023. Mit diesem Kommando ist es möglich, einige Konfigurationen der Shell direkt
  3024. aus der desktop.inf-Datei zu lesen, die vom Desktop beim Systemstart be-
  3025. nutzt wird. Diese Informationen sind:
  3026.     aktuelles Directory,
  3027.     Bezeichnungen der Laufwerke,
  3028.     Extender für ausführbare Programme.
  3029. Jede dieser Eigenschaften läßt sich mit einem der Flags ausblenden, so
  3030. daß man sich beim Aufruf von rdti die gewünschten Konfigurationen ein-
  3031. stellen kann. Wenn keine Flags angegeben sind, werden alle diese Ini-
  3032. tialisierungen durchgeführt.
  3033. Wenn keine Datei angegeben ist, wird die Datei /desktop.inf auf dem
  3034. Bootlaufwerk benutzt. Es kann nur eine Datei angegeben werden, Wildcards
  3035. sind nicht erlaubt, der Aufruf "rdti c:/desk*.inf" ist also unzulässig.
  3036.  
  3037. Flags:
  3038.     -d    Wenn dieses Flag nicht angegeben ist, wird das Directory
  3039.         von jedem geöffneten Fenster ausgegeben.
  3040.     -c    Wenn dieses Flag nicht angegeben ist, wird ein cd in
  3041.         das Directory von jedem geöffneten Fenster ausgeführt.
  3042.         Auf diese Weise kann man das aktuelle Directory auf das
  3043.         des obersten Fensters einstellen.
  3044.     -l    Wenn dieses Flag nicht angegeben ist, liest die Shell die
  3045.         Bezeichnungen der Laufwerke (die im Desktop unter den
  3046.         Laufwerk-Icons stehen). Diese Bezeichnungen werden z.B.
  3047.         von den internen Kommandos drive und df benutzt. Die
  3048.         alten Einstellungen der Bezeichnungen gehen dabei ver-
  3049.         loren.
  3050.     -x    Wenn dieses Flag nicht angegeben ist, initialisiert die
  3051.         Shell die Variable XEXT anhand der Extender, die in der
  3052.         Datei als Extender von ausführbaren Programmen (egal ob
  3053.         GEM, TOS oder TTP) eingetragen sind. Der alte Inhalt von
  3054.         XEXT geht dabei verloren, es sei denn, in der Datei sind
  3055.         keine Extender definiert.
  3056.     -v    Wenn dieses Flag angegeben ist, gibt rdti Informationen
  3057.         über den Dateinamen sowie die durchgeführten Konfigura-
  3058.         tionen aus.
  3059.  
  3060. Siehe auch:    drive
  3061.  
  3062. -----
  3063. read - Variablen einlesen
  3064.  
  3065. Syntax: read [[-] Var]
  3066.  
  3067. Eine Zeile wird von StdIn gelesen und, falls vorhanden, in der Variablen
  3068. Var abgelegt. Falls eine Variable mit Namen Var bereits existiert, so wird
  3069. der alte Wert überschrieben.
  3070. Wenn das Flag - angegeben ist, werden in der Eingabe Steuersequenzen und
  3071. Shellvariablen expandiert.
  3072.  
  3073. Beispiele:
  3074. 1) Einlesen einer Benutzereingabe:
  3075.     echo Bitte geben Sie Ihren Namen ein
  3076.     read NAME
  3077.     echo Der Name ist $NAME
  3078.         
  3079. 2) Einlesen der Anzahl der freien RAM-Bytes in eine Variable:
  3080.     mem | read RAM
  3081.     echo Es sind $RAM Bytes frei
  3082.    (ist analog zu "RAM=`mem`")
  3083.  
  3084. 3) Warten auf Druck auf ENTER
  3085.     echo Bitte ENTER drücken
  3086.     read
  3087.  
  3088. 4) Benutzung des Flags "-":
  3089.     read x
  3090.     $PATH                <------------- Eingabe
  3091.    speichert die Zeichenkette "$PATH" in der Variablen x.
  3092.     read - x
  3093.     $PATH                <------------- Eingabe
  3094.    speichert den Wert der Shellvariablen PATH in der Variablen x.
  3095.    
  3096. -----
  3097. readonly - Variablen schreibschützen
  3098.  
  3099. Syntax: readonly [[-] {Variable}]
  3100.  
  3101. Schreibgeschützte Variablen können nicht gelöscht und ihre Werte können
  3102. nicht verändert werden. Mit dem readonly-Kommando kann das Schreibschutz-
  3103. Flag von Variablen gesetzt und gelöscht werden.
  3104. Wenn readonly ohne Parameter aufgerufen wird, wird eine Liste aller schreib-
  3105. geschützter Variablen ausgegeben.
  3106. Ansonsten wird das Schreibschutz-Flag bei allen angegebenen Variablen ge-
  3107. setzt oder, wenn - angegeben ist, gelöscht.
  3108. Die Namen der Variablen können dabei im Format der erweiterten Wildcards
  3109. angegeben werden, z.B. "readonly a*" betrifft alle Variablen, deren Name
  3110. mit a beginnt. Näheres siehe okami.doc.
  3111. Es können nur Variablen schreibgeschützt werden, die vom Benutzer angelegt
  3112. oder verändert worden sind, also den Status "USR" haben (siehe "vars").
  3113. Um Variablen schreibzuschützen, die von der Shell selber angelegt wurden,
  3114. z.B. PIPDIR, hilft folgender Trick:
  3115.     PIPDIR=$PIPDIR
  3116.     readonly PIPDIR
  3117. Durch die Zuweisung wird der Wert der Variablen nicht verändert, die
  3118. Variable erhält aber den USR-Status.
  3119.  
  3120. Beispiele:
  3121.     readonly
  3122.                 erzeugt eine Liste aller schreibgeschützter
  3123.                 Variablen.
  3124.     readonly VAR1 VAR2 KEY
  3125.                 die Variablen VAR1, VAR2 und KEY werden
  3126.                 schreibgeschützt.
  3127.     readonly - VAR1 KEY
  3128.                 der Schreibschutz der Variablen VAR1 und
  3129.                 KEY wird entfernt.
  3130.     readonly *E*
  3131.                 alle Variablen, deren Name ein E enthält,
  3132.                 werden schreibgeschützt.
  3133.  
  3134. Siehe auch:    export
  3135.         vars
  3136.  
  3137. -----
  3138. rm - Dateien löschen
  3139.  
  3140. Syntax: rm [-friqv] File {File}
  3141.  
  3142. Alle Dateien, die einem der Muster File entsprechen, werden gelöscht.
  3143.  
  3144. Flags:    -f    Es werden keine Fehlermeldungen bzgl. fehlenden Dateien
  3145.         ausgegeben. Außerdem werden auch Dateien, bei denen das
  3146.         Read Only-Flag gesetzt ist, gelöscht.
  3147.     -i    Vor dem Löschen werden die Namen aller Dateien angezeigt,
  3148.         und der Anwender wird gefragt, ob er diese löschen will
  3149.         oder nicht. Als Ja gelten die Eingabe eines Wortes, das
  3150.         mit y oder Y beginnt, sowie ein Druck auf ENTER ohne Eingabe.
  3151.         Als Nein gilt jede andere Eingabe.
  3152.     -q    Es wird interaktiv gelöscht, d.h. der Anwender wird bei
  3153.         jeder Datei gefragt, ob er diese löschen will oder nicht.
  3154.     -r    Es wird rekursiv gelöscht, d.h. wenn Ordner angegeben sind,
  3155.         so werden die Ordner mitsamt allen enthaltenen Dateien und
  3156.         Unterordnern gelöscht. Wenn das Flag -f nicht gesetzt ist,
  3157.         erfolgt bei allen schreibgeschützten Dateien eine Nachfrage.
  3158.         Das Flag -q ist ohne Wirkung!
  3159.     -v    Die Namen der gelöschten Dateien werden auf dem Bildschirm
  3160.         ausgegeben.
  3161.  
  3162. Achtung: Ordner können mit diesem Kommando nur gelöscht werden, wenn das
  3163. Flag -r angegeben ist. Das normale Kommando zum Löschen von Ordnern ist
  3164. rmdir.
  3165.  
  3166. Beispiele:
  3167.  
  3168. rm xyz.bak
  3169.             Löschen einer Datei.
  3170. rm *.bak
  3171.             Löschen aller .bak-Dateien.
  3172. rm -f *.bak *.dup *.out
  3173.             Löscht auch schreibgeschützte Dateien.
  3174. rm -rf /*
  3175.             Löscht ohne Nachfrage alles!
  3176. rm -rfv /tmp
  3177.             Löscht den Ordner /tmp mit allen enthaltenen Dateien
  3178.             und Unterordnern. Die Namen der gelöschten Dateien
  3179.             werden auf dem Bildschirm ausgegeben.
  3180.  
  3181. Rückgabewert:
  3182.     -1    Aufruffehler
  3183.     sonst    Anzahl der gelöschten Dateien (und Ordner bei -r).
  3184.  
  3185. Siehe auch:    rmdir
  3186.  
  3187. -----
  3188. rmdir - Leere Ordner löschen
  3189.  
  3190. Syntax: rmdir Path {Path}
  3191.  
  3192. Die angegebenen Ordner werden gelöscht. Es dürfen keine Dateien oder Unter-
  3193. ordner in Path enthalten sein. Um einen Ordner mitsamt seinem Inhalt zu
  3194. löschen, gibt es das Kommando rm -r.
  3195.  
  3196. Rückgabewert: Anzahl der gelöschten Ordner.
  3197.  
  3198. Siehe auch:    rm
  3199.  
  3200. -----
  3201. rpn - SIEHE upn
  3202.  
  3203. -----
  3204. rsconf - Konfiguration der RS232-Schnittstelle
  3205.  
  3206. Syntax: rsconf [-s(Speed] [(+|-)x] [(+|-)r] [-p(0|1|2)] [-b(Bits)] [-w(Word)]
  3207.  
  3208. Die serielle Schnittstelle (Modemport) wird konfiguriert. Die Parameter
  3209. haben folgende Bedeutung:
  3210.  
  3211.     -s    Übertragungsgeschwindigkeit. Mögliche Werte für Speed sind:
  3212.         19200, 9600,4800,3600,2400,2000,1800,1200,600,300,200,
  3213.         150,134,110,75,50 (alles in baud). Der Defaultwert ist 9600.
  3214.     -x    XON/XOFF wird abgeschaltet    (Default).
  3215.     +x    XON/XOFF wird eingeschaltet.
  3216.     -r    RTS/CTS  wird abgeschaltet    (Default).
  3217.     +r    RTS/CTS  wird eingeschaltet.
  3218.     -p    Parität. Mögliche Angaben sind:
  3219.         0 (keine Parität), 1 (ungerade), 2 (gerade). Der Default-
  3220.         wert ist 0.
  3221.     -b    Anzahl der Start- und Stopbits. Mögliche Angaben:
  3222.         Bits    Startbits    Stopbits    Übertragung
  3223.         0    0        0        Synchron  (Default)
  3224.         1    1        1        Async.
  3225.         1.5    1        1.5        Async.
  3226.         2    1        2        Async.
  3227.     -w    Wortlänge. Mögliche Angaben für Word sind:
  3228.         8,7,6,5 (in bits). Der Defaultwert ist 8.
  3229.  
  3230. Beispiele:
  3231.     rsconf
  3232.         stellt ein: 9600 baud, kein XON/XOFF, kein RTS/CTS, keine
  3233.         Parität, 0 Start- und Stopbits, Wortlänge 8 bit.
  3234.     rsconf -s4800
  3235.         wie oben, nur mit 4800 baud.
  3236.     rsconf -s19600 +x +r -p1 -b2 -w7
  3237.         stellt ein: 19600 baud, XON/XOFF, RTS/CTS, ungerade Pari-
  3238.         tät, 1 Startbit, 2 Stopbits, Wortlänge 7 bit.
  3239.  
  3240. -----
  3241. scr - Bildschirmfarbe einstellen
  3242.  
  3243. Syntax: scr [-bwlhg]
  3244.  
  3245. Einstellen von Hinter- und Vordergrundfarbe sowie der Anzahl der Zeilen auf
  3246. dem Bildschirm (nur in hoher Auflösung sinnvoll).
  3247. Flags:    -b (black)    Einstellen von dunklem Hinter- und hellem Vorder-
  3248.             grund.
  3249.     -w (white)    Einstellen von hellem Hinter- und dunklem Vorder-
  3250.             grund.
  3251.     -g (gray)    Der Bildschirm wird mit dem grauen Desktop-Hinter-
  3252.             grundmuster gefüllt. Das ist sinnvoll vor dem Starten
  3253.             von Gem-Programmen, z.B. in der Gemexec-Funktion.
  3254.     -l (low)    Einstellen von 24 Zeilen (normale Schrift).
  3255.     -h (high)    Einstellen von 48 Zeilen (kleine Schrift).
  3256.  
  3257. Für die Einstellung der Zeilenanzahl mit -l und -h gilt:
  3258.  
  3259. 1) gon muß aktiv sein.
  3260. 2) Nach der Einstellung wird der Bildschirm gelöscht.
  3261. 3) Die neue Zeilenanzahl wird in der Shellvariablen COLUMNS abgelegt.
  3262. 4) Die Einstellung beruht auf einer undokumentierten VDI-Funktion, zu
  3263.    der das Profi-Buch sagt: "Verwendung auf eigene Gefahr". Abstürze sind
  3264.    möglich.
  3265.  
  3266. Wenn Overscan aktiv ist, gon aber nicht, dann kann der Bildschirm mit
  3267. -g nicht grau gefärbt werden. In diesem Fall wird er bei -g nur gelöscht.
  3268. Das ist ein Grund mehr, gon als eins der ersten Kommandos im profile
  3269. auszuführen.
  3270.  
  3271. Siehe auch:    cursor
  3272.         gemexec
  3273.         keyb
  3274.         mouse
  3275.         overscan
  3276.  
  3277. -----
  3278. set - Shell-Flags einstellen
  3279.  
  3280. Syntax: set [-|([+Flags] [-Flags])]
  3281.  
  3282. Es wird ein Shell-Flag gesetzt oder gelöscht, oder es wird der Status
  3283. aller Shell-Flags ausgegeben.
  3284. Bei der Verwendung ohne Parameter wird der Status aller Shell-Flags
  3285. mit einer kurzen Erklärung des jeweiligen Flags ausgegeben.
  3286. Bei der Verwendung mit dem Parameter - wird der Status aller Shell-Flags
  3287. in einer Form ausgegeben, die später als Parameter für set benutzt werden
  3288. kann. Dies ist nützlich, wenn in einem Shellscript ein Flag lokal geändert
  3289. werden soll:
  3290.     A=`set -`
  3291.     set +x
  3292.     ................... (irgendwelche Kommandos)
  3293.     set $A
  3294.     unset A
  3295. Der Status der Flags wird in die Variable a eingelesen. Diese Variable wird
  3296. später benutzt, um die Änderung (set +x) ggfs. rückgängig zu machen.
  3297.  
  3298. Bei der Verwendung mit einem anderen Parameter als einem einzelnen Minus-
  3299. zeichen wird das entsprechende Flag gesetzt (+) oder zurückgesetzt (-).
  3300. Beispiel: set +x setzt das Flag x.
  3301.       set -x löscht das Flag x.
  3302.  
  3303. Eine Liste der zu verwendenden Flags gibt es unter dem Stichwort
  3304. "shellflags" in dieser Datei.
  3305.  
  3306. -----
  3307. shellflags - Flags, die mit dem set-Kommando eingestellt werden können
  3308.  
  3309. Die folgenden Flags können benutzt werden:
  3310.  
  3311.     b    Wenn dieses Flag gesetzt ist, wird in einer Eingabezeile
  3312.         jeder Slash (/) in einen Backslash (\) umgeformt. Dadurch
  3313.         ist es möglich, Pfadnamen wie in Unix üblich mit Slashes
  3314.         zu trennen (was einfacher ist, da man auf dem ST für einen
  3315.         Slash zwei, für einen Backslash aber drei Tasten gleich-
  3316.         zeitig drücken muß). Wenn das Flag nicht gesetzt ist, werden
  3317.         keine Slashes in Backslashes umgeformt.
  3318.         Die Umformung betrifft sämtliche Eingaben, also auch Zu-
  3319.         weisungen an Variablen, Zeilen aus Shellscripts etc.
  3320.         Nach dem Start der Shell ist dieses Flag gesetzt.
  3321.  
  3322.     l    Wenn dieses Flag gesetzt ist, werden Dateinamen in
  3323.         Kleinbuchstaben ausgegeben. Wenn das Flag nicht gesetzt ist,
  3324.         werden Dateinamen so ausgegeben, wie sie auf der Diskette
  3325.         gespeichert sind (in Großbuchstaben).
  3326.         Dieses Flag beeinflußt nicht die Möglichkeit, Dateinamen
  3327.         in Kleinbuchstaben einzugeben.
  3328.         Nach dem Start der Shell ist dieses Flag gesetzt.
  3329.  
  3330.     s    Wenn dieses Flag gesetzt ist, schreibt die Shell nach dem
  3331.         Programmende durch Eingabe von exit oder shutdown oder 
  3332.         durch Druck auf Ctrl V das aktuelle Directory ($CWD) in
  3333.         die Datei $HOME\wdir. Die Datei wird unsichtbar gemacht.
  3334.         Wenn das Profile ($HOME\profile) folgende Zeilen enthält:
  3335.             set +s
  3336.             read a < $HOME\wdir
  3337.             cd $a
  3338.         dann wird die Shell nach jedem Aufruf auf das Directory
  3339.         eingestellt, in dem sie zuletzt verlassen wurde. Dies ist
  3340.         sehr sinnvoll beim Einsatz einer Festplatte.
  3341.         Nach dem Start der Shell ist dieses Flag nicht gesetzt.
  3342.  
  3343.     x    Vor dem Ausführen einer Binärdatei (PRG, TOS etc.) wird
  3344.         das aktuelle Verzeichnis auf das Verzeichnis umgestellt,
  3345.         in dem sich die Datei befindet. Nach der Ausführung der
  3346.         Datei wird das aktuelle Verzeichnis wieder zurückgesetzt.
  3347.         Nach dem Start der Shell ist dieses Flag nicht gesetzt.
  3348.  
  3349.     c    Vor dem Ausführen eines Shellscripts wird das aktuelle
  3350.         Verzeichnis auf das Verzeichnis umgestellt, in dem sich 
  3351.         das Shellscript befindet. Nach dem Ende des Scripts wird
  3352.         das aktuelle Verzeichnis wieder zurückgesetzt.
  3353.         Nach dem Start der Shell ist dieses Flag nicht gesetzt.
  3354.  
  3355.     h    Wenn dieses Flag gesetzt ist, wird die Datei, aus der bei
  3356.         Druck auf Help die Hilfstexte zu den einzelnen Kommandos
  3357.         gelesen werden (i.d.R. diese Datei, commands.doc), resident
  3358.         im Speicher gehalten. Wenn das Flag nicht gesetzt ist, wird
  3359.         die Datei bei jedem Druck auf Help neu geladen. Nach dem
  3360.         Start der Shell ist dieses Flag gesetzt, und der einzige
  3361.         Grund, es zu löschen, ist Speicherplatzmangel. Um ein resi-
  3362.         dentes Helpfile aus dem Speicher zu entfernen, dieses Flag
  3363.         löschen (set -h), ein beliebiges Kommando eingeben und Help
  3364.         drücken.
  3365.         Nach dem Start der Shell ist dieses Flag gesetzt.
  3366.  
  3367.     H    Wenn dieses Flag gesetzt ist, speichert die Shell nach dem
  3368.         Laden der Hilfsdatei (siehe h) den Dateiindex in einer
  3369.         seperaten Datei bzw. liest den Index aus dieser Datei. Wenn
  3370.         dieses Flag nicht gesetzt ist, wird der Index immer im Speicher
  3371.         neu erstellt. Siehe auch okami.doc zum Thema Tastatureingabe
  3372.         und Help-Taste.
  3373.         Nach dem Start der Shell ist dieses Flag gesetzt.
  3374.  
  3375.     u    Wenn dieses Flag gesetzt ist, werden die Standard-Streams,
  3376.         also die Dateien, die für die Ein-Ausgabe-Umleitung und
  3377.         das Pipelining benutzt werden, im Binärmodus geöffnet. Das
  3378.         bedeutet, daß in der Ein- und Ausgabe über diese Dateien
  3379.         die Übersetzung zwischen CR/LR und CR abgeschaltet wird.
  3380.         Nach dem Start der Shell ist dieses Flag nicht gesetzt.
  3381.  
  3382.     w    Wenn dieses Flag gesetzt ist, interpretiert die Shell die
  3383.         erweiterten Wildcards * und []. Wenn das Flag nicht gesetzt
  3384.         ist, werden alle Wildcards wie unter TOS behandelt. Dies be-
  3385.         trifft nur die Angabe von Dateinamen, nicht die sonstige Ver-
  3386.         wendung der erweiterten Wildcards z.B. bei Verwendung der
  3387.         Help-Taste.
  3388.         Nach dem Start der Shell ist dieses Flag gesetzt.
  3389.  
  3390.     p    Wenn dieses Flag gesetzt ist, wird beim Start von Binärpro-
  3391.         grammen diesen die Ein/Ausgabeumleitung in der Kommandozeile
  3392.         übergeben, und zwar in der Form "<Eingabedatei >Ausgabedatei".
  3393.         Vorher wird die Umleitung auf Gemdos-Basis rückgängig gemacht.
  3394.         Wenn das Flag nicht gesetzt ist, wird die Ein/Ausgabe aus-
  3395.         schließlich mit der Gemdos-Funktion Fforce umgeleitet, den
  3396.         Binärprogrammen wird also kein Dateiname übergeben. Dies ist
  3397.         die Normaleinstellung, die nur in extremen Sonderfällen ge-
  3398.         ändert werden sollte.
  3399.         Nach dem Start der Shell ist dieses Flag nicht gesetzt.
  3400.  
  3401.     a    Wenn dieses Flag gesetzt ist, werden jedem von der Shell ge-
  3402.         starteten Programm die übergebenen Parameter und der Programm-
  3403.         name nach dem xArg-Protokoll übergeben.
  3404.         Nach dem Start der Shell ist dieses Flag gesetzt.
  3405.  
  3406.     f    Wenn dieses Flag gesetzt ist, wird, wenn in der Tastaturein-
  3407.         gabe Dateinamen-Vervollständigung mit Pfeil links oder ESC
  3408.         ausgeführt wird, an den eingegebenen Dateinamen ein `*' an-
  3409.         gehängt, wodurch dieser als Präfix für die auszuwählenden
  3410.         Dateien wirkt.
  3411.         Nach dem Start der Shell ist dieses Flag nicht gesetzt.
  3412.  
  3413.     e    Wenn dieses Flag gesetzt ist, werden alle geänderten oder neu
  3414.         angelegten Shellvariablen automatisch ins Environment ex-
  3415.         portiert (siehe `export').
  3416.         Nach dem Start der Shell ist dieses Flag nicht gesetzt.
  3417.  
  3418.     L    Wenn dieses Flag gesetzt ist, werden Kommandos mit dem
  3419.         Zeileneditor der Shell eingelesen. Wenn dieses Flag gelöscht
  3420.         ist, werden Kommandos von der Standardeingabe gelesen und
  3421.         können somit aus einer Datei, Pipe oder Schnittstelle kommen,
  3422.         womit der Zeileneditor nicht fertigwird.
  3423.         Daher muß, wenn die Shell zwar von der Standardeingabe lesen,
  3424.         aber nicht interaktiv sein soll (z.B. wenn sie Kommandos von
  3425.         einer Schnitttelle ausführen soll), beim Aufruf der Shell
  3426.         `-L' angegeben werden.
  3427.         Achtung: wenn L nicht gesetzt ist, kann die Shell nicht durch
  3428.         Druck auf Ctrl-D, sondern nur mit Ctrl-Z oder durch Eingabe
  3429.         von "exit" beendet werden.
  3430.         Nach dem Start der Shell ist dieses Flag gesetzt.
  3431.  
  3432.     S    Wenn dieses Flag gesetzt ist, benutzt die Shell eine Signal-
  3433.         verarbeitung, um Abstürze bei internen Kommandos u.ä. abzu-
  3434.         fangen. Eine Eingabe wie "memex 123" bringt, wenn S nicht
  3435.         gesetzt ist, die Shell (selbstverständlicherweise) zum
  3436.         Absturz. Wenn das S-Flag gesetzt ist, werden solche Fälle
  3437.         abgefangen, es erscheint dann "Killed", und es erscheint
  3438.         wieder das Shell-Prompt.
  3439.         Der Nachteil davon ist, daß die Signalverarbeitung u.U.
  3440.         mit anderen residenten Programmen, die Exceptions-Vektoren
  3441.         verbiegen, kollidieren kann.
  3442.         ACHTUNG: Dieses Flag darf nur beim Start der Shell über
  3443.         einen Übergabeparameter gesetzt werden und NICHT mit dem
  3444.         regulären set-Kommando, weder im Profile noch sonstwie.
  3445.         Die Ergebnisse sind sonst undefiniert (d.h. es ist nicht
  3446.         vorhersehbar, ob und wann die betreffenden Vektoren umge-
  3447.         bogen oder wiederhergestellt werden).
  3448.         Nach dem Start der Shell ist dieses Flag gesetzt.
  3449.  
  3450. -----
  3451. shutdown - Abschalten oder Neubooten
  3452.  
  3453. Syntax: shutdown [-rRtfv]
  3454.  
  3455. Wenn eins der Flags -r und -R angegeben ist, wird nach einer Sicherheits-
  3456. abfrage ein Warmstart (bei -r) oder Kaltstart (bei -R) durchgeführt.
  3457.  
  3458. Wenn keins der Flags -r und -R angegeben ist, wird der Rechner bereit zum
  3459. Abschalten gemacht. Nach einer Sicherheitsabfrage werden alle Streams ge-
  3460. schlossen sowie Maus und Cursor abgeschaltet.
  3461. Wenn die Datei $HOME\bin\ship.exe vorhanden ist, wird sie geladen und
  3462. ausgeführt (als Binärprogramm). Festplattenbenutzer sollten hierhin
  3463. das SHIP.PRG der Harddisk-Utility-Diskette kopieren. Damit wird auch die
  3464. Festplatte zum Abschalten bereit gemacht.
  3465. Laut Handbuch der Atari-Festplatte kann diese zwar jederzeit abgeschaltet
  3466. werden, und SHIP.PRG braucht nur vor einem Transport gestartet zu werden.
  3467. Trotzdem ist es sinnvoll, die Platte vor jedem Abschalten zu parken, da
  3468. ansonsten der Schreib-Lesekopf wie ein Damoklesschwert über den empfind-
  3469. lichen Daten hängt.
  3470. Wenn weitere Aktionen beim Shutdown erwünscht sind, kann man ein Programm
  3471. schreiben, das diese Aktionen ausführt, und dieses nach $HOME\bin\ship.exe
  3472. kopieren. Dieses Programm kann das Harddisk-Ship-Programm dann per Pexec
  3473. aufrufen.
  3474. Danach wird die Meldung "...shutdown completed..." ausgegeben, und das
  3475. System läuft in eine Endlosschleife, die nur durch einen Reset verlassen
  3476. werden kann.
  3477.  
  3478. Wenn beim Laden und Starten von ship.exe ein Fehler auftritt, wird shutdown
  3479. abgebrochen (außer wenn -f angegeben ist). Wenn ship.exe nicht gefunden wird,
  3480. erscheint eine Warnung, aber shutdown wird nicht abgebrochen.
  3481.  
  3482. Flags:
  3483.     -r    Warmstart. Die Festplatte wird nicht geparkt, das Programm
  3484.         $HOME\bin\ship.exe wird nicht ausgeführt.
  3485.     -R    Wie -r, aber Kaltstart.
  3486.     -t    Wenn dieses Flag angegeben ist, wird vor dem Shutdown bzw.
  3487.         Reset das mit trap definierte Kommando ausgeführt.    
  3488.     -f    Es erfolgt keine Sicherheitsabfrage. Wenn beim Laden und
  3489.         Starten von ship.exe ein Fehler auftritt, wird shutdown
  3490.         nicht abgebrochen.
  3491.     -v    Vor jeder Aktion wird eine entsprechende Meldung auf den
  3492.         Bildschirm geschrieben. Ist ohne Wirkung bei -r und -R,
  3493.         da es hier keine Aktionen gibt, zu denen sich irgendwelche
  3494.         Meldungen lohnen würden, außerdem hätte man nicht viel
  3495.         Zeit, die Meldungen zu lesen.
  3496.  
  3497. Siehe auch:    trap
  3498.  
  3499. -----
  3500. sleep - eine Weile warten
  3501.  
  3502. Syntax: sleep [-sm] n
  3503.  
  3504. Dieses Kommando legt eine Pause von n Sekunden ein.
  3505. Wenn gon aktiv ist, wird zum Warten die AES-Funktion evnt_timer aufgerufen,
  3506. wodurch in der Wartezeit die Multitasking-Accessories zum Zuge kommen. Der
  3507. Nachteil ist, daß hier die Wartezeit nicht allzu genau ist; bei aktivem
  3508. gon ergab "time sleep 1" Zeiten zwischen 0.2 und 1.1 Sekunden.
  3509. Wenn gon nicht aktiv ist, wird zum Warten eine Warteschleife benutzt, die
  3510. den 200-Hz-Systemtimer abfragt. Hierbei kommt "time sleep 1" konstant auf
  3511. 1.01 Sekunden.
  3512.  
  3513. Flag:    -s    Es wird n Timer-Zyklen zu je 1/200 Sekunden gewartet.
  3514.         "sleep 1" ist also äquivalent zu "sleep -s 200". Es wird
  3515.         in einer Warteschleife gewartet, auch wenn gon aktiv ist.
  3516.     -m    Es wird n Millisekunden gewartet. "sleep 1" ist also auch
  3517.         äquivalent zu "sleep -m 1000". Dieses Flag hat nur Sinn,
  3518.         wenn gon aktiv ist, ansonsten wird nicht n Millisekunden,
  3519.         sondern n/5 Timer-Zyklen zu je 1/200 Sekunden gewartet.
  3520.  
  3521. -----
  3522. sort - Sortieren
  3523.  
  3524. Syntax: sort [-lnrs]
  3525.  
  3526. Das sort-Kommando ist ein Filter, d.h. es liest seine Standard-Eingabe
  3527. (StdIn), macht etwas damit und schreibt das Ergebnis zur Standard-Aus-
  3528. gabe (StdOut).
  3529. sort liest Zeilen von StdIn und gibt sie in sortierter Reihenfolge wieder
  3530. aus. Die Maximalanzahl der Zeilen ist 500. (Wer mehr braucht, kann dafür
  3531. den Software-Support benutzen. Die tatsächliche Anzahl der Zeilen einer
  3532. Shellversion kann mit "ver -l" ermittelt werden.)
  3533.  
  3534. Flags:
  3535.     -l    Es wird nach der Länge der Zeilen sortiert, die kürzeste
  3536.         Zeile kommt zuerst.
  3537.     -n    Es wird numerisch sortiert. Die Eingabezeilen werden als
  3538.         Zahlenangaben betrachtet (die mit %, 0 und 0x beginnen
  3539.         dürfen, um binäre, oktale oder hexadezimale Zahlen zu
  3540.         kennzeichnen) und in aufsteigender Reihenfolge sortiert,
  3541.         d.h. die kleinste Zahl kommt zuerst.
  3542.     -r    Die Sortierreihenfolge wird umgekehrt.
  3543.     -s    Die Strings werden nicht verkürzt. Wenn dieses Flag nicht
  3544.         angegeben ist, werden führende und endende Leer- und
  3545.         Tabulatorzeichen entfernt. Dies ist notwendig, wenn z.B
  3546.         mit "ls | sort -l" eine Dateiliste nach der Länge der
  3547.         Dateinamen sortiert werden soll, da in der Ausgabe des
  3548.         ls-Kommandos alle Dateinamen mit Leerzeichen auf 14 Zeichen
  3549.         Länge gebracht werden. 
  3550.  
  3551. Wenn keins der Flags l und n angegeben ist, wird nach lexikographischer
  3552. Reihenfolge sortiert (mit der strcmp-Funktion, alle Kleinbuchstaben kommen
  3553. daher nach allen Großbuchstaben).
  3554. Zum Sortieren wird der Quicksort-Algorithmus benutzt.
  3555.  
  3556. -----
  3557. split - eine Datei ein kleine Stücke aufteilen
  3558.  
  3559. Syntax: split [-bvf] {[-Num] Datei}
  3560.  
  3561. Jede der angegebenen Dateien wird in Stücke von maximal Num Zeilen (mit je
  3562. max. 80 Zeichen) aufgeteilt. Der Defaultwert für n ist 80. Die erzeugten
  3563. Teildateien haben denselben Namen wie die Quelldatei, wobei Extender von
  3564. 000 bis maximal 999 erzeugt werden. Wenn mehr als 999 Teilstücke notwendig
  3565. werden, wird der Rest der Datei in die Datei mit dem Extender .999 ge-
  3566. schrieben.
  3567. Wenn die Teildateien bereits existieren, erfolgt eine Sicherheitsnachfrage.
  3568. Wird diese mit Nein beantwortet, nimmt split die nächste Datei usf., bis
  3569. eine Datei gefunden ist, die nicht existiert oder zu der der Anwender sein
  3570. Einverständnis zum Überschreiben gibt.
  3571.  
  3572. Flags:
  3573.     -b    Die Datei wird in Stücke zu je max. Num Bytes aufgeteilt.
  3574.         Diese Option ist notwendig, um Binärdateien zu zerteilen.
  3575.     -f    Es erfolgt keine Nachfrage bei schon existierenden Dateien,
  3576.         diese werden überschrieben.
  3577.     -v    Es wird der Name jeder erzeugten Datei auf dem Bildschirm
  3578.         ausgegeben.
  3579.  
  3580. Beispiel:
  3581.     split -100 commands.doc
  3582.         teilt die angegebene Datei in Stücke zu je 100 Zeilen auf.
  3583.         Die erzeugten Dateien haben die Namen commands.000,
  3584.         commands.001 usw.
  3585.     split -10 f1.txt -20 f2.txt -30 f3.txt
  3586.         teilt f1.txt in Teile zu 10, f2.txt in Teile zu 20 und
  3587.         f3.txt in Teile zu 30 Zeilen auf.
  3588.     split long.doc
  3589.         teilt long.doc in Teile zu 80 Zeilen auf.
  3590.     split -bv -700000 part_c.lzh
  3591.         Aufteilen einer langen Archivdatei in Stücke, die auf
  3592.         eine Diskette passen. Die Namen der erzeugten Dateien
  3593.         werden auf dem Bildschirm ausgegeben.
  3594.  
  3595. Achtung: dieses Kommando sollte nur dann auf Binärdateien angewandt werden,
  3596. wenn das Flag -b benutzt wird.
  3597.  
  3598. -----
  3599. te - Terminal-Emulator
  3600.  
  3601. Syntax: te [-dk] [Dev {file | :string}]
  3602.  
  3603. Dies ist ein sehr einfacher und primitiver Terminal-Emulator. Er kann Daten
  3604. an eine beliebige Schnittstelle (RS232, Drucker, Midi) schicken und von dort
  3605. einlesen sowie Dateien über die Schnittstelle ausgeben. Seine Fähigkeiten
  3606. reichen allerdings aus zur Kommunikation mit einem Modem oder zum Ein-
  3607. loggen in eine Mailbox. Durch die Möglichkeit, während einer Mailbox-
  3608. sitzung te zu verlassen und andere Shell-Kommandos einzugeben, lassen
  3609. sich Up- und Downloads realisieren.
  3610. Mit Dev wird die zu benutzende Schnittstelle angegeben. Mögliche Werte sind:
  3611.  
  3612.     0    paralelle Schnittstelle (Drucker)
  3613.     1    serielle Schnittstelle (Modem) (default)
  3614.     2    Konsole (keine gute Idee)
  3615.     3    Midi-Schnittstelle
  3616.     4    Tastatur (eine sehr schlechte Idee)
  3617.  
  3618. Die Voreinstellung ist 1 (serielle Schnittstelle).
  3619. Wenn keine Dateien angegeben sind, arbeitet te im Dialogmodus, d.h. es werden
  3620. Daten von der Tastatur eingelesen und über die Schnittstelle geschickt sowie
  3621. Daten von der Schnittstelle eingelesen und auf StdOut ausgegeben. Beendet wird
  3622. te durch einen Druck auf UNDO.
  3623. Wenn Dateinamen angegeben sind, werden alle diese Dateien über die Schnitt-
  3624. stelle geschickt. Eingaben von der Schnittstelle werden ignoriert. Achtung:
  3625. in diesem Fall muß als erstes die Schnittstellennummer (Dev) angegeben sein.
  3626. Anstelle von Dateinamen können auch Strings angegeben werden, die direkt auf
  3627. die Schnittstelle geschickt werden. Diese Strings müssen mit einem Doppel-
  3628. punkt (:) eingeleitet werden. Der Doppelpunkt selber wird nicht mitgeschickt.
  3629. Achtung: te fügt am Ende des Strings kein Newline-Zeichen ein!
  3630. Wenn der String Leerzeichen enthält, muß er in Anführungszeichen gesetzt
  3631. werden.
  3632.  
  3633. Flag:    -d    Wenn dieses Flag angegeben ist, werden alle im Dialogmodus
  3634.         von der Schnittstelle eingelesenen Zeichen wieder an selbige
  3635.         zurückgeschickt. Das ist nützlich zum Testen von Schnitt-
  3636.         stellenverbindungen.
  3637.     -k    Wenn dieses Flag angegeben ist, werden im Dialogmodus alle
  3638.         Tastatureingaben auf dem Bildschirm ausgegeben. Das ist
  3639.         nur dann notwendig, wenn das an der Schnittstelle ange-
  3640.         schlossene Gerät das nicht selber macht.
  3641.  
  3642. Beispiele:
  3643.     te
  3644.         arbeitet im Dialogmodus.
  3645.  
  3646.     te 3
  3647.         ebenso, aber über die Midi-Schnittstelle.
  3648.  
  3649.     te 1 file.txt xyz.abc
  3650.         schickt die Dateien file.txt und xyz.abc an die serielle
  3651.         Schnittstelle.
  3652.  
  3653.     te >aux.in
  3654.         empfängt Daten von der seriellen Schnittstelle und schreibt
  3655.         diese in die datei aux.in, solange bis die UNDO-Taste gedrückt
  3656.         wird.
  3657.  
  3658.     te 1 :"ATD1234^n"
  3659.         schickt eine Steuersequenz zum automatischen Wählen der
  3660.         Telefonnummer an das an der seriellen Schnittstelle ange-
  3661.         schlossene Modem.
  3662.  
  3663. Siehe auch:    dial
  3664.         ts
  3665.  
  3666. -----
  3667. tee - T-Kreuzung der Eingabe
  3668.  
  3669. Syntax: tee File
  3670.  
  3671. StdIn wird nach StdOut und nach File kopiert.
  3672.  
  3673. -----
  3674. test - logische Ausdrücke auswerten
  3675.  
  3676. Syntax: test Ausdruck
  3677. oder    [ Ausdruck ]
  3678.  
  3679. Das test-Kommando wird normalerweise in Verbindung mit if oder while benutzt.
  3680. Der Rückgabewert ist 1, wenn der Ausdruck wahr ist, und 0 sonst. test er-
  3681. zeugt keine Ausgabe.
  3682. Der Ausdruck kann eins der folgenden Formate haben:
  3683.  
  3684.         Dateioperationen:
  3685. -f file     Wahr, wenn file existiert.
  3686. -x file     Wahr, wenn file ausführbar ist.
  3687. -d file     Wahr, wenn file ein Directory ist.
  3688. -g file     Wahr, wenn file ein GEM-Programm ist ($GEXT).
  3689.         Variablenoperationen:
  3690. +v var        Wahr, wenn var der Name einer gesetzten Shellvariablen ist.
  3691. -v var        Wahr, wenn es keine Shellvariable namens var gibt.
  3692.         Stringoperationen:
  3693. a = b        Wahr, wenn die Strings a und b gleich sind.
  3694. a != b        Wahr, wenn die Strings a und b ungleich sind.
  3695. a -t b        Wahr, wenn das Kommando a auf eine der Typen b ausgeführt
  3696.         werden kann. Mögliche Typen sind:
  3697.             f    Shellfunktion
  3698.             i    internes Kommando
  3699.             s    Shellscript
  3700.             b    Binärprogramm
  3701.             n    Kommando nicht gefunden
  3702.         Es können beliebig viele dieser Typen angegeben werden.
  3703.  
  3704.         Die folgenden numerischen Operationen vergleichen zwei
  3705.         Zahlen x und y:
  3706. x -eq y     x =  y
  3707. x -ne y     x != y
  3708. x -lt y     x <  y
  3709. x -gt y     x >  y
  3710. x -le y     x <= y
  3711. x -ge y     x >= y
  3712.  
  3713. Achtung: bei -v und +v muß der Name einer Variablen angegeben werden und
  3714. nicht der Inhalt, also z.B. "test +v TERM" und nicht "test +v $TERM".
  3715.  
  3716. Beispiele: siehe if.
  3717.  
  3718. -----
  3719. then - SIEHE if
  3720.  
  3721. -----
  3722. time - Stoppuhr für Programme
  3723.  
  3724. Syntax: time Kommando {Parameter}
  3725.  
  3726. Führt das Kommando mit den angegebenen Parametern aus und schreibt die
  3727. Laufzeit in Minuten, Sekunden und 1/100 Sekunden auf den Bildschirm.
  3728. Das Ermitteln der Zeit geschieht mittels des 200 Hz-Systemtimers.
  3729.  
  3730. -----
  3731. touch - Dateien erneuern oder anlegen
  3732.  
  3733. Syntax: touch File {File}
  3734.  
  3735. Wenn File bereits existiert, werden Datei-Datum und -Zeit auf die aktuelle
  3736. Systemzeit gesetzt. Wenn File noch nicht existiert, wird eine Datei mit
  3737. dem Namen File angelegt.
  3738.  
  3739. Rückgabewert:
  3740.     -1    Aufruffehler
  3741.     1    Die Datei ist erzeugt worden.
  3742.     0    Das Dateidatum einer existierenden Datei wurde geändert.
  3743. Hierbei bezieht sich der Wert auf die letzte behandelte Datei.
  3744.  
  3745. -----
  3746. tr - Filter
  3747.  
  3748. Syntax: tr Filter
  3749.  
  3750. Filtert StdIn nach StdOut, abhaengig von den Angaben in Filter.
  3751. Jede Zeile in der Datei Filter (bis auf Leerzeilen oder Zeilen, die mit
  3752. # (Doppelkreuz) anfangen), bestimmt ein Zeichen. Die Zeilen haben den
  3753. Aufbau
  3754.  
  3755. s d
  3756.  
  3757. wobei s und d in dezimaler, hexadezimaler, oktaler oder Ascii-Schreibweise
  3758. angegebene Werte zwischen 0 und 255 sind.
  3759. Bsp: um in StdIn jedes A (grosses A) in B (grosses B) zu filtern, kann
  3760. z.B. eine der folgenden Zeilen in Filter stehen:
  3761.  
  3762.     !A  !B            (Character-Schreibweise)
  3763.     65  !B            (dezimale Schreibweise)
  3764.     0x41 !B         (hexadezimale Schreibweise)
  3765.     0101 !B         (oktale Schreibweise)
  3766.  
  3767. Auch B kann in jedem der Fälle in jeder der vier Schreibweisen
  3768. angegeben werden.
  3769.  
  3770. Beispiel:
  3771.     tr tab.tr <datei.txt >prt:
  3772. filtert die Datei datei.txt mit der Filterdatei tab.tr. Das Ergebnis wird
  3773. zum paralellen Drucker (prt:) geschickt.
  3774.  
  3775. -----
  3776. trap - Definieren eines Kommandos zum Beenden der Shell
  3777.  
  3778. Syntax: trap [-|[+]Kommando {Parameter}]
  3779.  
  3780. Es wird ein Shell-Kommando definiert, das nach dem Beenden der Shell mit
  3781. exit oder Control-V aufgerufen wird. Das Trap-Kommando wird nur beim Beenden
  3782. der Shell selber ausgeführt, nicht beim Beenden eines Shell-Scripts mit exit
  3783. oder bei einem shutdown (außer bei shutdown -t).
  3784. Beim Aufruf ohne Parameter wird das aktuelle Trap-Kommando ausgegeben.
  3785. Beim Aufruf mit einem Minuszeichen wird das Trap-Kommando gelöscht.
  3786. Beim Aufruf mit einem anderen Parameter als einem Minuszeichen wird dieser
  3787. Parameter als Trap-Kommando gespeichert. Wenn der Parameter mit einem Plus-
  3788. zeichen beginnt, wird das Pluszeichen entfernt und der Rest an das bisherige
  3789. Trap-Kommando angehängt.
  3790.  
  3791. Beispiele:
  3792.     trap echo hallo
  3793.             definiert "echo hallo" als das Kommando, das nach
  3794.             einem exit ausgeführt werden soll.
  3795.     trap
  3796.             gibt das zuvor definierte Kommando aus.
  3797.     trap -
  3798.             löscht die Einstellung.
  3799.     trap cls ^; echo Byebye
  3800.             löscht beim Ende der Shell den Bildschirm und
  3801.             schreibt "Byebye". Nach Eingabe von trap ohne
  3802.             Parameter erscheint von da an "cls ; echo Byebye".
  3803.     trap cls ; echo Byebye
  3804.             löscht beim Ende der Shell nur den Bildschirm,
  3805.             "Byebye" wird sofort geschrieben.
  3806.     trap `trap` ^; echo Byebye
  3807.             hängt das Kommando "echo Byebye" an den aktuellen
  3808.             trap-String an.
  3809.     trap +echo Byebye
  3810.             ebenso.
  3811.  
  3812. Eine sinnvolle Anwendung ist
  3813.     trap cursor -v
  3814. im Profile. Dadurch wird verhindert, daß nach dem Ende der Shell der
  3815. Cursor auf dem Desktop weiterhin sichtbar ist.
  3816.  
  3817. Anmerkung: Wer ständig mit gon arbeitet, braucht goff nicht durch das trap-
  3818. Kommando geben zu lassen, da goff bei Ende der Shell automatisch ausgeführt
  3819. wird.
  3820.  
  3821. Siehe auch:     exit
  3822.         history
  3823.         shutdown
  3824.         "Speichern und Restaurieren der Shell-Einstellungen"
  3825.                                 in tricks.doc
  3826.  
  3827. -----
  3828. true - Rückgabe von 1
  3829.  
  3830. Syntax: true
  3831.  
  3832. Dieses Kommando liefert immer eine 1 zurück. Es wird normalerweise mit dem
  3833. while-Kommando benutzt.
  3834.  
  3835. Beispiel: Programmieren einer Endlosschleife. Sie kann durch "break" im
  3836. Schleifenrumpf beendet werden.
  3837.  
  3838.         while true
  3839.         do
  3840.           ............. (irgendwelche Kommandos)
  3841.         done
  3842.  
  3843. Siehe auch: while
  3844.         if
  3845.         false
  3846.  
  3847. -----
  3848. ts - Terminal Server
  3849.  
  3850. Syntax: ts [-detrf] [-hHerald] [-lLogin] [-pPasswort] [-mAnzahl] [-bGerät]
  3851.  
  3852. Dieses Kommando verwandelt die Okami-Shell in einen Terminal-Server, der
  3853. Kommandos von einer beliebigen Schnittstelle annimmt und ausführt. Man kann
  3854. den ST also über eine Modem- oder Kabelverbindung von einem anderen Rechner
  3855. aus fernsteuern.
  3856. Die Ein/Ausgabe läuft unter das mit -b angegebene Bios-Gerät. Folgende
  3857. Angaben sind möglich:
  3858.  
  3859.     0    paralelle Schnittstelle (Drucker)
  3860.     1    serielle Schnittstelle (Modem) (default)
  3861.     2    Konsole (keine gute Idee)
  3862.     3    Midi-Schnittstelle
  3863.     4    Tastatur (eine sehr schlechte Idee)
  3864.  
  3865. Wenn ein Herald (Einschaltmeldung) angegeben ist, wird dieser zuerst über die
  3866. Schnittstelle geschickt. Danach kann der Benutzer am anderen Ende der Leitung
  3867. sich über Login und Passwort, falls angegeben, autentisieren. Die Shell
  3868. fragt über die Schnittstelle "login:" bzw. "Password:", das Kommando wird
  3869. nur fortgesetzt, wenn der Benutzer die in der Kommandozeile nach -l bzw. -p
  3870. angegebenen Strings eingibt.
  3871. (Login und Passwort sind also zwei äquivalente Kennworte. ts verwaltet nicht
  3872. wie Unix verschiedene Benutzer-Logins, die jeweils ein eigenes Passwort haben.)
  3873.  
  3874. Die nach -m angegebene Anzahl legt fest, wie oft ein fehlerhaftes Login oder
  3875. Passwort eingegeben werden darf. Wenn diese Zahl kleiner als 0 ist, darf man
  3876. beliebig viele falsche Logins bzw. Passworte eingeben (dies ist die Default-
  3877. Einstellung).
  3878. Wenn der Benutzer an der Schnittstelle als Login "exit" eingibt, wird ts
  3879. beendet.
  3880. ts liest von der angegebenen Schnittstelle Kommandos und führt diese aus, so-
  3881. lange bis auf der Tastatur des ST eine Taste gedrückt oder von der Schnitt-
  3882. stelle das Kommando "exit" eingegeben wird. FÜhrende und endende Leerzeichen
  3883. der Schnittstellen-Eingaben werden ignoriert. Die Ausgabe der eingelesenen
  3884. Kommandos wird wieder über die Schnittstelle übertragen, wenn nicht das Flag
  3885. -r angegeben ist. Alle eingelesenen Kommandos und deren Ausgaben werden auf
  3886. dem Bildschirm des ST protokolliert, wenn nicht das Flag -e angegeben ist.
  3887. Alle Eingaben des Terminals können mit Backspace bzw. Ctrl-H korrigiert wer-
  3888. den.
  3889.  
  3890. Achtung: interaktive Kommandos, die Tastatureingaben benötigen, wie rm -i oder
  3891. pg, können auf diese Weise nicht benutzt werden, da diese nur die Tastatur
  3892. des ST abfragen!
  3893.  
  3894. Flags:    -d    Der Server arbeitet nicht voll-duplex. Wenn dieses Flag nicht
  3895.         angegeben ist, werden alle empfangenen Zeichen wieder zurück
  3896.         über die Schnittstelle geschickt. Wenn -d angegeben ist, ge-
  3897.         schieht das nicht, das angeschlossene Terminal muß die Zeichen
  3898.         also selber ausgeben.
  3899.     -e    Die empfangenen Kommandos und deren Ausgaben erscheinen nicht
  3900.         auf dem Bildschirm.
  3901.     -t    Die empfangenen Kommandos werden nicht ausgeführt.
  3902.     -r    Die Ausgabe der empfangenen Kommandos wird nicht auf die
  3903.         Schnittstelle umgeleitet.
  3904.     -f    Vor jedem Login wird der Schnittstellenpuffer gelöscht.
  3905.     -h    Angabe der Einschaltmeldung, die vor jedem Login über die
  3906.         Schnittstelle geschickt wird.
  3907.     -l    Angabe eines optionalen Login-Kennwortes.
  3908.     -p    Angabe eines optionalen Passwortes.
  3909.     -m    Maximalanzahl der falschen Logins/Kennworte.
  3910.     -b    Angabe der zu benutzenden Schnittstelle (Bios-Gerätenummer).
  3911.  
  3912. Beispiel:
  3913. Eingabe auf dem ST:    ts -lroot -patari -h"Okami Shell^015^n"
  3914. Auf dem (an der seriellen Schnittstelle) angeschlossenen Terminal:
  3915.  
  3916.     Ausgabe            Eingabe
  3917.  
  3918.     Okami Shell
  3919.     login:            root
  3920.     password:        atari
  3921.      $            ......... (irgendein Shell-Kommando)
  3922.     (Ausgabe desselben)    exit
  3923.     Okami Shell
  3924.     login:            exit 
  3925.  
  3926. Durch die Eingabe von "exit" als Login wird ts beendet.
  3927. Als Terminal kann z.B. ein Atari Portfolio mit der seriellen Schnittstelle
  3928. und dem xterm-Programm von der Diskette des Portfolio-Praxisbuches betrie-
  3929. ben werden. Natürlich kann man sich (was vielleicht sinnvoller ist) auch
  3930. über eine Modem-Verbindung auf diese Weise in den ST einloggen.
  3931.  
  3932. Siehe auch:    te
  3933.  
  3934. -----
  3935. type - Aufrufpfad von Kommandos ermitteln
  3936.  
  3937. Syntax: type [-fs] Kommando {Kommando}
  3938.  
  3939. Es wird ausgegeben, unter welchem Pfad die Shell das Programm zu dem
  3940. angegebenen Kommando aufrufen würde. Wenn es sich um ein internes
  3941. Kommando handelt, erscheint die Meldung "... is a shell builtin".
  3942. Wenn es sich um eine Shellfunktion handelt, erscheint die Meldung
  3943. "... is a function", außerdem wird die Definition der Funktion ausgegeben
  3944. (falls das Flag -f nicht angegeben ist).
  3945.  
  3946. Benutzt werden die Shellvariablen $PATH für die Pfade, auf denen das
  3947. Kommando gesucht wird, sowie $XEXT und $SEXT für die zu untersuchenden
  3948. Dateinamen-Extender. Wenn ein Kommando in der Hash-Tabelle enthalten ist,
  3949. wird die dort gespeicherte Pfad ausgegeben, ohne daß auf der Platte gesucht
  3950. wird. Es erscheint dann die Ausgabe "... is hashed".
  3951.  
  3952. Beispiel: Es sei d:\shell\bin\test.prg eine Programmdatei. $PATH enthalte
  3953. den Pfad d:\shell\bin, $XEXT enthalte den Extender .prg (z.B.:
  3954.     PATH=.,..,d:\shell,d:\shell\bin
  3955.     XEXT=.prg,.tos,.ttp
  3956. Dann wird bei der Eingabe von "type test" der vollständige Pfadname
  3957. der Datei test.prg ausgegeben. Wenn das aktuelle Directory d:\shell\bin
  3958. ist, erzeugt "type test" die Ausgabe "test is .\test.prg".
  3959.  
  3960. Flag:    -f    Wenn dieses Flag angegeben ist, wird bei einer Shell-
  3961.         funktion nur die Zeile "... is a function" ausgegeben
  3962.         und nicht die vollständige Definition der Funktion.
  3963.     -s    Es wird nur der vollständige Name der angegebenen Kommandos
  3964.         ausgegeben, also nicht "... is a shell builtin" etc. Bei
  3965.         internen Kommandos und Shellfunktionen ist das der Name,
  3966.         bei externen Kommandos der Aufrufpfad.
  3967.  
  3968. Siehe auch:    hash
  3969.         den Abschnitt über externe Kommandos
  3970.  
  3971. -----
  3972. unalias - SIEHE unset
  3973.  
  3974. -----
  3975. unset, unalias - Shellfunktionen und -variablen löschen
  3976.  
  3977. Syntax: unset|unalias Name {Name}
  3978.  
  3979. Alle angegebenen Shellfunktionen und -variablen werden gelöscht. Vorsicht:
  3980. wenn es zu einem der angegebenen Namen sowohl eine Funktion als auch eine
  3981. Variable gibt, werden beide gelöscht. Daher empfiehlt es sich, sich an die
  3982. Konvention zu halten, Variablennamen in Großbuchstaben und Funktionsnamen
  3983. in Kleinbuchstaben zu benutzen.
  3984. Dieses Kommando kann auch unter dem Namen unalias angesprochen werden, um das
  3985. Ausführen von Shellscripts zu ermöglichen, die für C-Shell-orientierte Shells
  3986. geschrieben wurden.
  3987.  
  3988. Siehe auch:    alias
  3989.  
  3990. -----
  3991. upn, rpn - UPN-Rechner incl. Einheitenumrechner
  3992.  
  3993. Syntax: upn|rpn [%Fmt] UPN-Ausdruck
  3994.  
  3995. Mit diesem Kommando können beliebige mathematische Ausdrücke berechnet wer-
  3996. den. Die Ausdrücke werden in der umgekehrten polnischen Notation (UPN) an-
  3997. gegeben, weil (1) ich ein Fan von HP-Rechnern bin und (2) weil ein Auswerter
  3998. für UPN-Ausdrücke einfacher zu programmieren ist. Wer eher auf die englische
  3999. Schreibweise steht, kann dieses Kommando auch unter dem Namen "rpn" aufrufen.
  4000.  
  4001. Ein UPN-Ausdruck ist eine Folge von durch Leerzeichen (:= Space, Tab...)
  4002. getrennten Zahlen oder Operationen.
  4003. Eine Zahl hat das Format
  4004.     [-][Vorkommastellen][.Nachkommastellen][E Exponent]
  4005. Jede Zahl, die in einem UPN-Ausdruck steht, wird auf einen internen Stack
  4006. geschoben. Dieser Stack faßt bis zu 32 Zahlen. (Wer mehr braucht, kann den
  4007. Software-Support benutzen, um eine erweiterte Version der Shell zu bekommen.
  4008. Die tatsächliche Größe des Stacks kann mit "ver -l" ermittelt werden.)
  4009. Außerdem gelten die Symbole "pi" und "e" als Zahlen und schieben die Kreis-
  4010. zahl Pi bzw. die Eulersche Zahl e auf den Stack.
  4011. Als Operation gilt alles, was keine Zahl ist. Die Operationen nehmen 0,
  4012. 1 oder 2 Zahlen vom Stack, machen etwas damit und legen das Ergebnis auf
  4013. den Stack zurück.
  4014. Nachdem der ganze UPN-Ausdruck auf diese Weise ausgewertet wurde, wird das
  4015. oberste Stack-Element auf StdOut ausgegeben. Das dabei verwendete Format
  4016. kann angegeben werden; gemeint ist das Format für die printf-Funktion.
  4017. Das Format kann das Ergebnis als long- oder double-Zahl ausgeben, das Resul-
  4018. tat bei Verwendung eines anderen Formats (z.B. %s) ist undefiniert. Näheres
  4019. siehe ein beliebiges C-Handbuch.
  4020. Zusätzlich zum Stack gibt es einen Speicher, der bis zu 10 Werte faßt, die
  4021. beliebig geschrieben und gelesen werden.
  4022.  
  4023. Achtung:
  4024. (1) Es darf nur die Formatangabe gemacht werden, keinen weiteren Text ange-
  4025. ben (z.B. "upn '%Das Ergebnis ist %d' 2 2 +" ist falsch - benutze statt-
  4026. dessen "echo Das Ergebis ist `upn %ld 2 2 +`")
  4027. (2) Bei Integerformaten muß das long-Format angegeben werden, also nicht
  4028. "upn %d ...", sondern "upn %ld ...." (analog für %x). Ebenso sollte nicht %f,
  4029. sondern %lf für Fließkommaformate verwendet werden.
  4030.  
  4031. Stack und Speicher sind global und behalten ihren Inhalt über mehrere Auf-
  4032. rufe des upn-Kommandos hinweg. Man kann also z.B. mit "upn 123" eine Zahl
  4033. auf den Stack legen, dann weitere Kommandos ausführen und die Zahl dann
  4034. erst mit einem erneuten upn-Aufruf verarbeiten. Der Stack faßt maximal
  4035. 32 Zahlen. (Wer mehr braucht: Software-Support benutzen... Die tatsächliche
  4036. Stackgröße einer Shellversion kann mit "ver -l" ermittelt werden)
  4037.  
  4038. Eine Liste aller verfügbaren UPN-Funktionen findet sich in dieser Datei
  4039. zu dem Stichwort "upnfkt".
  4040.  
  4041. Eine komfortable Schnittstelle zum upn-Kommando ist das externe Kommando
  4042. calc (siehe dort).
  4043.  
  4044. Rückgabewert: Der ganzzahlige Anteil des obersten Stack-Elements (x).
  4045.  
  4046.  
  4047. Siehe auch:    upnfkt
  4048.         calc (externes Kommando)
  4049.  
  4050. -----
  4051. upnfkt - Funktionen des UPN-Rechners
  4052.  
  4053. Zur Bedienung des UPN-Rechners siehe das Stichwort upn. Dieser Abschnitt
  4054. erklärt alle Operationen, die im UPN-Rechner zur Verfügung stehen.
  4055.  
  4056. Im folgenden bedeutet x die oberste und y die zweitoberste Zahl auf dem
  4057. Stack. "x := x+y" bedeutet, daß zwei Zahlen vom Stack genommen und addiert
  4058. und daß das Ergebnis wieder auf den Stack gelegt wird.
  4059.  
  4060.  
  4061. Speicheroperationen:
  4062.  
  4063. sto        speichert y in Speicher x. Es wird nichts auf den Stack
  4064.         zurückgelegt.
  4065. rcl        liefert den Inhalt von Speicher x.
  4066.  
  4067. In beiden Fällen wird, wenn x größer als 9 ist, (x mod 10) benutzt.
  4068. Zu Beginn werden alle Speicherplätze zu 0 initialisiert.
  4069.  
  4070.  
  4071. Mathematische Operationen:
  4072.  
  4073. +,-,*,/,\    x := y +-*/ x        (Grundrechenarten)    (*)
  4074. %        x := y % x        (Modulo)
  4075. **        x := y hoch x        (Potenzieren)
  4076. ++        x := x+1        (Inkrement)
  4077. --        x := x-1        (Dekrement)
  4078. chs        x := -x         (Vorzeichenwechsel)
  4079. rcp        x := 1/x        (Reziprokwert)
  4080. log        x := log (y) x        (Log. zur Basis y)
  4081. ln        x := ln x        (Log. zur Basis e)
  4082. lg        x := lg x        (Log. zur Basis 10)
  4083. ld        x := ld x        (Log. zur Basis 2)
  4084. deg        x := x * (180/Pi)    (Umrechnung Rad.->Deg.) (**)
  4085. grad        x := x * (200/Pi)    (Umrechnung Rad.->Grad) (**)
  4086. sin        x := sin x        (Sinus)
  4087. sinh        x := sin hyp x        (Sinus Hyperbolicus)
  4088. asin        x := arc sin x        (Arcus-Sinus)
  4089. asinh        x := arc sin hyp x    (Arcus-Sinus Hyperbolicus)
  4090. cos        x := cos x        (Cosinus)
  4091. cosh        x := cos hyp x        (Cosinus Hyperbolicus)
  4092. acos        x := arc cos x        (Arcus-Cosinus)
  4093. acosh        x := arc cos hyp x    (Arcus-Cosinus Hyperbolicus)
  4094. tan        x := tan x        (Tangens)
  4095. tanh        x := tan hyp x        (Tangens Hyperbolicus)
  4096. atan        x := arc tan x        (Arcus-Tangens)
  4097. atanh        x := arc tan hyp x    (Arcus-Tangens Hyperbolicus)
  4098. sqrt        x := sqrt x        (Quadratwurzel)
  4099. sqr        x := x*x        (Quadrat, schneller als "x 2 **")
  4100. exp        x := e hoch x
  4101. exp2        x := 2 hoch x
  4102. exp10        x := 10 hoch x
  4103. abs        x := |x|        (Betrag)
  4104. sign        x := signum x        (Vorzeichen: -1, 0, 1)
  4105. min        x := min {x,y}        (Minimum)
  4106. max        x := max {x,y}        (Maximum)
  4107. fact        x := x!         (Fakultät)
  4108. int        x := int x        (Vorkommastellen)
  4109. frac        x := frac x        (Nachkommastellen)
  4110. rand        x aus (0,1)        (Zufallszahl)
  4111. rnd        x := x gerundet auf 1. Vorkommastelle
  4112.  
  4113. Außerdem gibt es die folgenden Einheiten-Umrechenfunktionen, die jeweils
  4114. x umrechnen:
  4115.  
  4116.     in2mm    mm2in        (inch <-> Millimeter)
  4117.     ft2m    m2ft        (Foot <-> Meter)
  4118.     mi2km    km2mi        (Meilen <-> Kilometer)
  4119.     m2yd    yd2m        (Meter <-> Yards)
  4120.     m2nmi    nmi2m        (Meter <-> nautische Meilen)
  4121.     m2rod    rod2m        (Meter <-> Rod, was immer das ist)
  4122.     m2pc    pc2m        (Meter <-> Parsec)
  4123.     gal2l    l2gal        (Gallonen <-> Liter)
  4124.     lb2kg    kg2lb        (engl. Pfund <-> Kilogramm)
  4125.     kg2oz    oz2kg        (Kilogramm <-> Unzen)
  4126.     kg2ozt    ozt2kg        (Kilogramm <-> Troy-Unzen)
  4127.     kg2u    u2kg        (Kilogramm <-> Units (atomare Masseeinheit))
  4128.     kg2slug    slug2kg        (Kilogramm <-> Slug)
  4129.     f2c    c2f        (Fahrenheit <-> Celsius)
  4130.     c2k    k2c        (Celsius <-> Kelvin)
  4131.     ms2mph    mph2ms        (Meter/Sekunde <-> Meilen pro Stunde)
  4132.  
  4133. Die folgenden Größenordnungsumrechenfunktionen rechnen x in die jeweilige
  4134. Größenordnung um. Um 2500 Gramm in Kilogramm umzurechnen, lautet der Aufruf
  4135. also "upn 2500 kilo".
  4136.  
  4137.     10 hoch i:    10 hoch -i:    i:
  4138.     exa        atto        18
  4139.     peta        femto        15
  4140.     tera        pico        12
  4141.     giga        nano        9
  4142.     mega        micro        6
  4143.     kilo        milli        3
  4144.     hecta        centi        2
  4145.     deca        deci        1
  4146.  
  4147. Die folgenden Größenordnungen arbeiten auf Basis 2, z.B. um Bytes in Kilo-
  4148. bytes umzurechnen.
  4149.  
  4150.     2 hoch i:    2 hoch -i:    i:
  4151.     bgiga        bnano        1000
  4152.     bmega        bmicro        100
  4153.     bkilo        bmilli        10
  4154.  
  4155. In den Umrechenfunktionen steht die 2 übrigens für das englische Wort "to",
  4156. das genauso ausgesprochen wird wie "two"; "in2mm" liest man also
  4157. "inch to millimeter".
  4158. Quellen für die Umrechnungsfaktoren: die Taschenrechner Hewlett-Packard 28C
  4159. und Commodore SR9190R.
  4160.  
  4161.  
  4162. Sonderfunktionen:
  4163.  
  4164. help    Es wird eine Liste aller verfügbarer Operationen ausgegeben. Hinter
  4165.     den Operationen erscheint in Klammern die Anzahl der Zahlen, die
  4166.     für die Operation vom Stack genommen werden.
  4167.  
  4168. list    Gibt den aktuellen Inhalt des Stacks auf dem Bildschirm aus.
  4169.  
  4170. look    Tut nichts. Dient dazu, das oberste Stackelement noch einmal aus-
  4171.     zugeben.
  4172.  
  4173. swap    Vertauscht die obersten beiden Stackelemente (x und y).
  4174.  
  4175. dup    dupliziert das oberste Stackelement.
  4176.  
  4177. pop    Löscht das oberste Element vom Stack.
  4178.  
  4179. clr    Löscht den gesamten Stack. Der Speicher ist davon nicht betroffen.
  4180.  
  4181.  
  4182. ANMERKUNGEN:
  4183.  
  4184. (*)     Zur Division kann sowohl der Slash (/) als auch der Backslash (\)
  4185. benutzt werden. Dadurch ist es möglich, den UPN-Rechner zu benutzen, auch
  4186. wenn das Shell-Flag -b gesetzt ist, das alle Slashes in der Eingabe in
  4187. Backslashes umformt.
  4188.  
  4189. (**)    Die trigonometrischen Funktionen wie sin, cos etc. arbeiten alle
  4190. im Gradmaß (Kreis = 2 Pi Grad). Mit den Operationen deg und grad können
  4191. Winkelangaben in Altgrad (Kreis = 360 Grad) und Neugrad (Kreis = 400 Grad)
  4192. umgerechnet werden.
  4193.  
  4194.  
  4195. Beispiele:
  4196. 1) Ausrechnen von 3+4:
  4197.     upn 3 4 +
  4198. 2) Berechnen der Oberfläche eines Kreises mit Radius 10:
  4199.     upn 10 sqr pi *
  4200. 3) Berechnen der Oberfläche eines Kreises mit Radius 123 mm in Zoll (inch):
  4201.     upn 123 sqr pi * mm2in
  4202. 4) Umrechnen von 36 Grad Celsius (Temperatur in Aachen am 12.8.1990) in
  4203.    Fahrenheit:
  4204.     upn 36 c2f
  4205. 5) Und die Temperatur in Aachen am 7.2.1991:
  4206.     upn 12.2 f2c
  4207. 6) Ab welcher Temperatur in Kelvin fängt Papier an zu brennen?
  4208.     upn 451 f2c c2k
  4209. 7) Wieviele Kilometer haben 25 nautische Meilen?
  4210.     upn 25 nmi2m kilo
  4211. 8) Wieviele Gramm hat eine Unze?
  4212.     upn 1 oz2kg milli
  4213. 9) Wieviele Bytes hat ein Kilobyte?
  4214.     upn 1 bkilo
  4215. 10) Und wieviele Bits hat ein Mega-ST 4?
  4216.     upn 4 bmega 8 *
  4217. 11) Benutzung des Formatstrings: Ausgabe der Fakultät von 12 in Hex:
  4218.     upn %lx 12 fact
  4219. 12) Shellvariablen können auch beutzt werden:
  4220.     echo Geben Sie zwei Zahlen ein:
  4221.     read x
  4222.     read y
  4223.     echo Die größere der Zahlen ist ^c
  4224.     upn %ld $x $y max
  4225. 13) Auflisten aller Operationen:
  4226.     upn help
  4227. 14) Zählen der Operationen des UPN-Rechners:
  4228.     upn %ld `upn help | wc -w` 2 /
  4229.    (zur Erklärung: "upn help" gibt für jede Operation zwei Worte aus, nämlich
  4230.    den Namen der Operation und die Anzahl der Parameter. "upn help | wc -w"
  4231.    zählt die Worte. Mit dem Ergebnis wird upn nochmals aufgerufen, um es durch
  4232.    2 zu teilen und damit die Anzahl der Operationen zu ermitteln.)
  4233. 15) Wieviel Speicherplatz in Kilobytes belegt eine Shell?
  4234.     upn %ld `mem` `sh mem` - bkilo
  4235. 16) Ausgabe des Ergebnisses der letzten Berechnung:
  4236.     upn look
  4237. 17) Benutzung des Speichers: Berechnen von sin 30, ablegen in Speicher 0,
  4238.     berechnen von cos 75, ablegen in Speicher 1, berechnen der Wurzel von
  4239.     3, ablegen in Speicher 2 und 3. Danach den Inhalt von Speicher 1 mit dem
  4240.     von Speicher 3 multiplizieren, davon den Logarithmus zur Basis Speicher 0
  4241.     berechnen und durch Speicher 2 teilen.
  4242.         upn 30 sin 0 sto 75 cos 1 sto 3 sqrt 2 sto 2 rcl 2 sto
  4243.     upn 0 rcl 1 rcl 3 rcl * log 2 rcl /
  4244.  
  4245. -----
  4246. vars - Shellvariablen auflisten
  4247.  
  4248. Syntax: vars [-aexs]
  4249.  
  4250. Gibt eine Liste der vom Anwender angelegten Shellvariablen nach StdOut.
  4251. Die Ausgabe besteht aus dem Variablennamen, dem aktuellen Wert und dem
  4252. Variablenstatus. Folgende Status-Angaben sind moeglich:
  4253.  
  4254. USR        Die Variable wurde vom Anwender oder von einem Shell-Script
  4255.         angelegt oder veraendert.
  4256. SYS        Die Variable wird vom System fuer das System angelegt.
  4257. R/O        Der Wert der Variablen kann nicht veraendert werden und
  4258.         die Variable kann nicht geloescht werden (siehe readonly).
  4259. EXP        Die Variable ist exportiert worden (siehe export).
  4260.  
  4261. Flags:    -a    Es werden alle Shellvariablen (auch die Systemvariablen)
  4262.         ausgegeben.
  4263.     -e    Es werden nur Variablen ausgegeben, die sich im Environment
  4264.         befinden (Status EXP).
  4265.     -x    Die Variablen werden im Deklarationsformat, als in der
  4266.         Form "NAME=WERT" ausgegeben. Der Variablenstatus wird
  4267.         nicht ausgegeben. Dieses Format kann in ein Shellscript
  4268.         übernommen werden.
  4269.     -s    Es wird eine Statistik ueber den freien und belegten Platz
  4270.         in der Variablentabelle ausgegeben.
  4271.  
  4272. Beispiele:
  4273.  
  4274. Anlegen einer Variablen:
  4275.     VAR=Hallo
  4276.  
  4277. "vars" erzeugt eine Ausgabe der Art:
  4278.  
  4279. VAR    =Hallo            USR
  4280.  
  4281. "vars -x" erzeugt eine Ausgabe der Art:
  4282.  
  4283. VAR=Hallo
  4284.  
  4285. Siehe auch:    env
  4286.         export
  4287.         readonly
  4288.  
  4289. -----
  4290. ver - Versionsnummern ausgeben
  4291.  
  4292. Syntax: ver [-oclgtdpmMa]
  4293.  
  4294. Wenn kein Flag angegeben ist, wird -oc angenommen.
  4295.  
  4296. Die Flags haben folgende Bedeutung:
  4297.  
  4298.     -o  Ausgabe der Versionsnummer der Shell.
  4299.     -c  Ausgabe von Datum und Uhrzeit des Kompilierens der Shell. Damit
  4300.         lassen sich verschiedene Upgrades innerhalb einer Versionsnummer
  4301.         unterscheiden.
  4302.     -l  Es wird eine genauere Analyse der Möglichkeiten der vorliegenden
  4303.         Shell-Version ausgegeben, die Angaben über die Maximalanzahl der
  4304.         Funktionen und Variablen, die Größe des UPN-Stacks usw. enthält.
  4305.     -g  Ausgabe der Gemdos-Versionsnummer. Sie wird mit der Gemdos-Funktion
  4306.         Sversion festgestellt und im Format Hauptnummer.Unternummer ausge-
  4307.         geben.
  4308.     -t  Ausgabe der TOS-Version und Länderkennung. Stammt aus dem TOS-
  4309.         Systemheader.
  4310.     -p  Ausgabe der PAL-Bildfrequenz (50 oder 60 Hz), ebenfalls aus dem
  4311.         TOS-Systemheader.
  4312.     -d  Ausgabe des TOS-Datums. Stammt ebenfalls aus dem TOS-Systemheader
  4313.         und wird wie dort im Format Monat/Tag/Jahr ausgegeben.
  4314.     -m  Ausgabe der Versionsnummer des installierten MiNT. Wenn kein MiNT
  4315.         installiert ist, erscheint "none".
  4316.     -M  Wie -m, aber es wenn MiNT nicht installiert ist, wird keine Ausgabe
  4317.         erzeugt.
  4318.     -a  Es erfolgen alle diese Ausgaben (außer -M und -l).
  4319.  
  4320. Beispiel: "ver -a" ergibt auf einem 1040ST mit deutschem TOS 1.4 und ohne MiNT
  4321. folgende Ausgabe:
  4322.  
  4323.     Okami Shell 1.3c                 [-o]
  4324.     compiled Nov. 22, 1991 21:09            [-c]
  4325.     GEMDOS Version 0.21                [-g]
  4326.     TOS Version 1.4 (FRG)                [-t]
  4327.     TOS Date 04/06/1989                [-d]
  4328.     PAL Mode 60 Hz                    [-p]
  4329.       MiNT Version: none                [-m]
  4330.  
  4331. In eckigen Klammern jeweils das Flag, das die betreffende Zeile erzeugt (er-
  4332. scheint nicht in der Ausgabe).
  4333. Bei den Flags -o und -c erscheinen natürlich andere Werte, je nach der ver-
  4334. wendeten Version der Shell.
  4335.  
  4336. "ver -l" gibt bei der Standardversion folgende Ausgabe:
  4337.  
  4338.     Max. # of variables          200
  4339.     Max. # of functions          200
  4340.     Max. # of nested while's     16
  4341.     Max. # of lines for sort     500
  4342.     Max. filespec length         80
  4343.     Max. length of input line    400
  4344.     Length of history buffer     100
  4345.     Size of hash table        101
  4346.     Length of RPN stack          32
  4347.     Size of RPN store        10
  4348.     Version supports MiNT
  4349.  
  4350. "Max. # of nested while's" ist die Maximalanzahl der while-Schleifen, die
  4351. ineinander geschachtelt werden können.
  4352. "Max. # of lines for sort" ist die Maximalanzahl der Zeilen, die mit dem
  4353. internen Kommando sort sortiert werden können.
  4354. "Max. filespec length" ist die maximale Länge eines Dateinamens incl. Pfad.
  4355. "Max. length of input line" ist die maximale Länge einer Eingabezeile nach
  4356. der Expansion von Variablen, Command Substitution usw.
  4357. "Length of history buffer" ist die Anzahl der Eingabezeilen, die in dem
  4358. Ringpuffer der Tastatur-History gespeichert werden können.
  4359. "Size of hash table" ist die Größe der internen Hash-Tabelle. Dies sollte
  4360. immer eine Primzahl sein.
  4361.  
  4362. -----
  4363. virus - Bootsektorviren aufspüren und entfernen
  4364.  
  4365. Syntax: virus [-xvsi] {drive}
  4366.  
  4367. Es wird der Bootsektor von jedem angegebenen Laufwerk eingelesen und auf
  4368. Ausführbarkeit getestet. Ein Bootsektor ist ausführbar, wenn seine Prüf-
  4369. summe 0x1234 beträgt; nur in diesem Fall kann ein Virus sich beim Booten
  4370. dieser Diskette oder Partition im Speicher einnisten. Auf Wunsch wird ein
  4371. ausführbarer Bootsektor nicht-ausführbar gemacht.
  4372. Wenn kein Laufwerk angegeben ist, wird nur Laufwerk A: untersucht.
  4373.  
  4374. Flags:
  4375.     -x    Ein ausführbarer Bootsektor wird nicht-ausführbar gemacht,
  4376.         indem das letzte Byte des Bootsektors inkrementiert wird.
  4377.     -v    Es erscheinen Meldungen über Prüfsumme und Ausführbarkeit
  4378.         zu jedem untersuchten Laufwerk. Wenn dieses Flag nicht an-
  4379.         gegeben ist, werden nur Meldungen über ausführbare Boot-
  4380.         sektoren ausgegeben.
  4381.     -s    Der Bootsektor wird nicht untersucht, sondern nach StdOut
  4382.         geschrieben.
  4383.     -i    Der Bootsektor wird nicht von dem angegebenen Laufwerk,
  4384.         sondern von StdIn eingelesen. Wenn der eingelesene Boot-
  4385.         sektor ausführbar ist und -x gesetzt ist, wird der Boot-
  4386.         sektor auf das angegebene Laufwerk geschrieben.
  4387.     -rambo    Erzeugt durch Erhöhen der Prozessortaktfrequenz in Ver-
  4388.         bindung mit dem Virus-Code ein Hyperfunksignal, das auf
  4389.         beliebige Entfernung den Programmierer des Virus erreicht
  4390.         und sein Gehirn mindestens 10E7 Lichtjahre weit weg
  4391.         teleportiert. (Noch nicht implementiert)
  4392.  
  4393. Beispiele:
  4394.     virus
  4395.         untersucht Laufwerk A: und gibt eine Warnung aus, wenn der
  4396.         Bootsektor ausführbar ist, ändert ihn aber nicht. Dieses
  4397.         Kommando kann in Shellscripts stehen, da es sich im
  4398.         Normalfall (Bootsektor ist nicht ausführbar) "unsichtbar"
  4399.         verhält.
  4400.     virus B: C:
  4401.         dasselbe für Laufwerk B: und Partition C:.
  4402.     virus bc
  4403.         genauso wie das vorige Beispiel.
  4404.     virus -s a: >boot.dat
  4405.         der Bootsektor von Laufwerk A: wird in die Datei boot.dat
  4406.         geschrieben.
  4407.     virus -i -x a: <boot.dat
  4408.         der zuvor gesicherte Bootsektor wird auf Ausführbarkeit 
  4409.         untersucht und ggfs. nicht-ausführbar gemacht.
  4410.     virus -s c: | hd
  4411.         es wird ein Hexdump des Bootsektors von Partition C: er-
  4412.         zeugt.
  4413.  
  4414. Rückgabewert:
  4415.     -1    Aufruffehler
  4416.     0    Der Bootsektor ist nicht ausführbar (gemacht worden).
  4417.     1    Der Bootsektor ist (immer noch!) ausführbar.
  4418. Hierbei bezieht sich dieser Wert auf das zuletzt untersuchte Laufwerk.
  4419.  
  4420. Die Idee zu diesem Kommando stammt aus dem Data-Becker-Buch "Atari ST intern
  4421. Band 2" von Martin Pauly, allerdings habe ich die Flags -s und -i hinzu-
  4422. gefügt und die Einleseroutinen geändert, damit auch Festplattenpartitionen
  4423. untersucht werden können.
  4424.  
  4425. -----
  4426. wc - Zeilen, Worte und Zeichen zählen
  4427.  
  4428. Syntax: wc [-lwcn] {File}
  4429.  
  4430. Es werden die Anzahl der Zeilen, Worte und Zeichen der angegebenen Datei
  4431. oder von StdIn ausgegeben. Ein Wort wird durch Leerzeichen, Tabs oder
  4432. Newline-Zeichen begrenzt.
  4433.  
  4434. Flags:    -l    Ausgabe der Anzahl der Zeilen
  4435.     -w    Ausgabe der Anzahl der Worte
  4436.     -c    Ausgabe der Anzahl der Zeichen
  4437.     -n    Ausgabe des jeweiligen Dateinamens
  4438. Wenn keine Flags angegeben sind, gelten alle Flags als aktiviert.
  4439.  
  4440. Beispiel:
  4441. 1) Ausgabe der Anzahlen der Zeilen und Zeichen aller C-Quell- und Header-
  4442.    dateien im aktuellen Directory:
  4443.     wc -lcn *.c *.h
  4444.         
  4445. 2) Ausgabe der Anzahl der internen Kommandos:
  4446.     cmds | wc -l
  4447.  
  4448. Rückgabewert:
  4449.     -1    Aufruffehler
  4450.     sonst    die Anzahl der gezählten Dateien.
  4451.  
  4452. -----
  4453. what - Dateien identifizieren
  4454.  
  4455. Syntax: what [-s] {Datei}
  4456.  
  4457. Dieses Kommando ist in der Unix-Welt sehr beliebt und gehört dort zu dem
  4458. Sourcecode-Control-System (SCCS). Der Sinn ist, eine jede Datei, egal ob
  4459. Ascii oder binär, anhand eines speziellen Codes identifizieren zu können.
  4460. Dieser Code steht irgendwo in der Datei, gefolgt von einer Zeichenkette, die
  4461. die Datei, den Autor und die Version kennzeichnet. Der Code ist @(#) (At
  4462. Klammer auf Doppelkreuz Klammer zu).
  4463. Das Kommando what sucht in jeder angegebenen Datei (oder in StdIn, wenn keine
  4464. Datei angegeben ist) nach der Zeichenkette @(#) und gibt alles aus, was
  4465. dahinter bis zum nächsten doppelten Anführungszeichen ("), Größerzeichen (>),
  4466. Zeilenende (\n) oder Nullbyte (\0) kommt.
  4467. Die übliche Art, diesen Identifikationsstring in einem Programm unterzubringen,
  4468. ist folgende Zeile kurz nach Dateibeginn:
  4469.  
  4470.     static char _M_ID_[]="@(#) Okami Shell 1.3 - cmds5.c";
  4471.  
  4472. Die Zeichenkette "@(#) Okami Shell 1.3 - cmds5.c" steht dann sowohl in der
  4473. C-Quelldatei als auch in dem O-File und dem ausführbaren Programm. Wenn alle
  4474. Module eines Programms auf diese Weise gekennzeichnet sind, kann man mit
  4475. what eine Liste aller Module, auch Librarymodule, bekommen, aus denen ein
  4476. Programm zusammengesetzt ist.
  4477. Wer die Quellen der Okami-Shell hat, kann mit what die Namen der in den einzel-
  4478. nen Modulen enthaltenen Funktionen ermitteln (z.B. "what cmds*.c").
  4479.  
  4480. Flag:    -s    Wenn dieses Flag angegeben ist, wird nur das erste @(#) in
  4481.         der Datei gesucht.
  4482.  
  4483. Beispiel:
  4484.     what *.sh    erzeugt eine Liste der Versionen aller Shellscripts
  4485.     what -s doc/*    eine Art Inhaltsverzeichnis der Anleitungsdateien
  4486.     what sh.ttp    ermittelt die Namen aller Quelldateien der Shell.
  4487.             Ggfs. muß sh.ttp vorher ent-pfxgepackt werden.
  4488.  
  4489. -----
  4490. while , do, continue, break, done - Schleifen
  4491.  
  4492. Syntax: while Kommando1
  4493.     do
  4494.     {Kommandos2|continue|break}
  4495.     done
  4496.  
  4497. Das while-Konstrukt darf nur in Shell-Scripts stehen. Die Ergebnisse bei
  4498. der Eingabe von der Tastatur oder einer Schnittstelle sind undefiniert
  4499. (was völlig natürlich ist).
  4500.  
  4501. Die Zeilen zwischen "do" und "done" werden ausgeführt, bis Kommando1
  4502. den Rückgabewert 0 liefert. In diesem Fall wird mit der Ausführung in der
  4503. "done" folgenden Zeile fortgefahren.
  4504. Das Kommando "break" beendet die while-Schleife augenblicklich. Es darf in
  4505. einem if-fi-Konstrukt stehen (was es normalerweise auch tut).
  4506. Das Kommando "continue" springt zurück zum zugehörigen "while"-Kommando.
  4507. Der aktuelle Schleifendurchlauf wird also beendet, und es beginnt ein
  4508. neuer Schleifendurchlauf. Ebenso wie "break" darf auch "continue" in einem
  4509. if-fi-Konstrukt stehen.
  4510. Die Wirkung von "break" und "continue" ist demnach identisch mit der von
  4511. "break" und "continue" in der Programmiersprache C.
  4512.  
  4513. Typische Kandidaten für "Kommando1" sind true, false und test (bzw. "[").
  4514.  
  4515. Beispiele:
  4516.  
  4517. 1) Wiederholen von Anweisungen:
  4518.  
  4519.     while [ $X != abc ]
  4520.     do
  4521.       echo Bitte abc eingeben.
  4522.       read X
  4523.     done
  4524.  
  4525.  
  4526. 2) Dateien mit der Fileselect-Box einlesen, bis der Anwender "Abbruch"
  4527.    anklickt:
  4528.  
  4529.     while true
  4530.     do
  4531.       fsel *.* . BUTTON
  4532.       if [ $BUTTON = 0 ]
  4533.       then
  4534.         break
  4535.       fi
  4536.     done
  4537.  
  4538.    "while true" ist also eine Endlosschleife, die nur durch break verlassen
  4539.    werden kann.
  4540.  
  4541.  
  4542. 3) Wie 2), aber es werden nur Dateien akzeptiert, die noch nicht existieren.
  4543.    Wenn eine bereits existierende Datei angewählt wurde (was mit [ -f $FILE ]
  4544.    herausgefunden wird), wird die while-Schleife mit "continue" von vorne
  4545.    begonnen.
  4546.  
  4547.     while true
  4548.     do
  4549.       # den Dateinamen in die Variable FILE einlesen
  4550.       FILE=`fsel *.* datei.txt BUTTON`
  4551.       if [ $BUTTON = 0 ]
  4552.       then
  4553.         break
  4554.       fi
  4555.       if [ -f $FILE ]
  4556.       then
  4557.         continue
  4558.       fi
  4559.       ...................... (mache was mit $FILE)
  4560.     done
  4561.  
  4562.  
  4563. 4) Eine Variable eingeben lassen, solange bis sie wirklich einen Wert
  4564.    enthält.
  4565.  
  4566.     while [ -v VARIABLE ]
  4567.     do
  4568.       echo Bitte geben Sie die Variable ein.
  4569.       read VARIABLE
  4570.     done
  4571.  
  4572.  
  4573. Siehe auch: test
  4574.         true
  4575.         false
  4576.         if
  4577.  
  4578. -----
  4579. xargs - Eingabe als Parameter für andere Kommandos
  4580.  
  4581. Syntax: xargs [Kommando {Parameter}]
  4582.  
  4583. Liest Zeilen von StdIn und führt das angegebene Kommando mit den angegebenen
  4584. Parametern und den eingelesenen Zeilen aus. Wenn kein Kommando angegeben
  4585. ist, wird als Default "echo" benutzt.
  4586. Wenn Kommando oder Parameter die Zeichenkette "{}" (öffnende und schließende
  4587. geschwungene Klammer) enthalten, wird die von StdIn eingelesene Zeile
  4588. anstelle dieser Zeichenkette eingesetzt. Ansonsten wird die eingelesene
  4589. Zeile nach einem Leerzeichen an den Parameterstring angehängt.
  4590.  
  4591. Beispiele:
  4592.     ls *.sh | xargs .
  4593.         führt alle Shellscripts im aktuellen Verzeichnis aus.
  4594.     ls *.c | xargs echo Die Datei {} ist da
  4595.         Erzeugt als Ausgabe z.B.:
  4596.             Die Datei sh.c ist da
  4597.             Die Datei cmds.c ist da
  4598.             Die Datei cmds2.c ist da
  4599.         usw.
  4600.     find e:\ *.dup | xargs rm -f
  4601.         Löscht alle *.dup-Dateien auf Laufwerk E: ohne Berücksichti-
  4602.         gung von Readonly-Dateien (rm -f).
  4603.     cmds | xargs echo {}"^t"^c
  4604.         Gibt die Namen aller interner Kommandos in mehreren Spalten
  4605.         auf dem Bildschirm aus. (Das geht einfacher mit "cmds -C")
  4606.  
  4607. ==============================================================================
  4608.  
  4609. 2) Externe Kommandos:
  4610.  
  4611. Wenn beim Shell-Prompt ein Kommando eingegeben wird, das keinem internen
  4612. Kommando entspricht, wird eine Datei mit dem entsprechenden Namen unter
  4613. allen in der Shell-Variablen PATH enthaltenen Pfaden gesucht. Wenn dort
  4614. eine Datei mit dem angegebenen Namen und einem der in $XEXT angegebenen
  4615. Extendern existiert, wird sie als Binärdatei aufgerufen. Wenn dort eine
  4616. Datei mit dem angegebenen Namen und einem der in $SEXT angegebenen Exten-
  4617. dern existiert, wird sie als Shellscript ausgeführt.
  4618.  
  4619. Beispiel: Es sei
  4620.     PATH=.,d:\bin
  4621.     XEXT=.prg,.tos
  4622.     SEXT=.sh
  4623.  
  4624. Nach Eingabe des Kommandos "test" werden die folgenden Dateien gesucht, die
  4625. erste gefundene Datei wird ausgeführt:
  4626.  
  4627.     test.prg
  4628.     test.tos
  4629.     test.sh
  4630.     d:\bin\test.prg
  4631.     d:\bin\test.tos
  4632.     d:\bin\test.sh
  4633.  
  4634. Die Dateien, die auf .prg oder .tos enden, werden als Binärdateien aufge-
  4635. rufen.
  4636. Die Dateien, die auf .sh enden, werden als Shellscripts ausgeführt.
  4637. Wenn mehrere der angeführten Dateien existieren, wird die nur erste
  4638. gefundene Datei ausgeführt.
  4639. Durch Eingabe von "type test" kann festgestellt werden, welche Datei
  4640. durch das Kommando test ausgeführt würde oder ob es sich um ein internes
  4641. Kommando handelt.
  4642.  
  4643. In der Shell-Variablen GEXT werden analog zu XEXT und SEXT Extender gespei-
  4644. chert, die angeben, welche Dateinen als GEM-Programme gestartet werden.
  4645. GEM-Programme werden über die Shellfunktion gemexec gestartet. Diese Funktion
  4646. kann vom Anwender frei verändert werden und darüber entscheiden, welche Aktio-
  4647. nen sie vor und nach dem Start des Programms ausführt oder ob sie es überhaupt
  4648. startet. Siehe hierzu auch den Abschnitt zu gemexec unter den internen Komman-
  4649. dos.
  4650.  
  4651. GEXT hat Wirkung auf alle Binärprogramme, also auf solche, die über die
  4652. Eingabe ihres Namens und mit XEXT gestartet werden, als auch auf solche,
  4653. die mit dem exec-Kommando aufgerufen werden. GEXT ist ohne Wirkung für
  4654. Shell-Scripts, auch wenn einer der Extender in GEXT mit einem der Extender
  4655. in SEXT übereinstimmt.
  4656.  
  4657. Folgende Werte sind nach Start der Shell voreingestellt:
  4658.     PATH=.,..,$HOME,$HOME\bin
  4659.     XEXT=.prg,.tos,.ttp,.app
  4660.     SEXT=.sh
  4661.     GEXT=.prg
  4662. Die Variablen können in der Datei profile verändert oder erweitert werden.
  4663.  
  4664. Außerdem ist es möglich, den vollen Pfadnamen zum Aufruf anzugeben. Dabei
  4665. muß jedoch auch der Extender mit angegeben werden. Das Kommando wird nur
  4666. ausgeführt, wenn der Extender einem der in $XEXT oder $SEXT angeführten
  4667. entspricht. (Dies entspricht dem Datei-Attribut "Executable" unter Unix.
  4668. In der Okami-Shell wird dieses Attribut durch die Shell-Variablen XEXT und
  4669. SEXT simuliert.)
  4670.  
  4671.  
  4672. Der Quellcode sämtlicher externer Kommandos gehört zum Lieferumfang.
  4673.  
  4674. Folgende externe Kommandos werden mitgeliefert:
  4675.  
  4676.  
  4677. -----
  4678. calc - Schnittstelle zum UPN-Rechner
  4679.  
  4680. Datei:    calc.sh
  4681. Syntax: calc
  4682.  
  4683. Dieses Shellscript dient dazu, das interne Kommando upn benutzerfreundlich
  4684. aufzurufen. Es erscheint das Prompt:
  4685.     upn >
  4686. Nun können beliebige upn-Ausdrücke eingegeben werden (siehe das interne
  4687. Kommando upn). Jeder Ausdruck wird mit ENTER abgeschlossen. Es können auch
  4688. unvollständige Ausdrücke angegeben werden, z.B. sind äquivalent:
  4689.  
  4690.     upn > 2 3 * 4 +
  4691.  
  4692. und
  4693.     upn > 2 3
  4694.     upn > *
  4695.     upn > 4 +
  4696.  
  4697. In der Eingabe kann die Zeichenkette "$_" (Dollar Underscore) benutzt wer-
  4698. den, um das Ergebnis der letzten Eingabezeile zu repräsentieren. Beispiel:
  4699.  
  4700.     upn > 17 4 +
  4701.     upn > pi 2 * sin $_ /
  4702.  
  4703. berechnet erst 17+4, das Ergebnis wird in der zweiten Zeile benutzt. Achtung:
  4704. in $_ wird immer nur der ganzzahlige Anteil gespeichert.
  4705.  
  4706. Durch Eingabe von clr wird der Stack gelöscht, durch Eingabe von list wird
  4707. der Inhalt des Stacks ausgegeben.
  4708.  
  4709. Das Programm wird beendet durch Eingabe von exit. Die Shellvariable "_"
  4710. (Underscore) enthält dann den ganzzahligen Anteil des letzten Ergebnisses.
  4711.  
  4712. Siehe auch:    upn
  4713.  
  4714. -----
  4715. format - Disketten formatieren
  4716.  
  4717. Datei:    format.ttp
  4718. Source: format.c
  4719. Syntax: format -V|[-s(SPT)] [-t(TPD)] [-1] [-i(Interleave)] [-v(Virgin)]
  4720.         [-n(VersNr)] [-N] [-B] [-x] [-q] [-l(Diskname)][Drive]
  4721.  
  4722. Vor dem Formatieren erfolgt eine Sicherheitsabfrage. Nach Eingabe von y
  4723. wird formatiert, nach einer anderen Eingabe oder Druck auf ENTER wird das
  4724. Programm abgebrochen.
  4725. Ebenso erfolgt eine Sicherheitsabfrage bei eigenartigen Werten (z.B.
  4726. anderen Laufwerksnummern als A: und B: etc.)
  4727.  
  4728. Die Voreinstellungen der einzelnen Flags sind:
  4729.     format -s9 -t80 -i1 -v0xe5e5 -n0x1000001 A:
  4730.  
  4731.  
  4732. Flags:
  4733.     -V    Die Versionsnummer und das Kompilierungsdatum des Formatier-
  4734.         programms werden ausgegeben. Es wird nicht formatiert. Alle
  4735.         anderen Parameter sind ohne Wirkung.
  4736.     -s    Anzahl der Sektoren pro Track. Default: 9.
  4737.     -t    Anzahl der Tracks pro Seite. Default: 80.
  4738.     -1    Wenn angegeben, wird die Diskette einseitig formatiert.
  4739.         Wenn nicht angegeben, wird die Diskette zweiseitig
  4740.         formatiert. Default: zweiseitig.
  4741.     -i    Die Anzahl der physikalischen Sektoren zwischen zwei
  4742.         logischen Sektoren. Default: 1.
  4743.     -v    Der Wert, der in die formatierten Sektoren geschrieben
  4744.         wird. Normalerweise 0xe5e5. Unabhängig von dieser Ein-
  4745.         stellung werden die Spuren 0 und 1 immer mit Nullen ge-
  4746.         füllt.
  4747.     -n    Die Versionsnummer, die in den Bootsektor geschrieben
  4748.         wird. Werte größer als 0x1000000 ergeben eine zufällige
  4749.         Versionsnummer.
  4750.     -N    Es wird kein Bootsektor angelegt.
  4751.     -B    Es wird nicht formatiert (nur Bootsektor).
  4752.     -x    Der Bootsektor wird ausführbar gemacht.
  4753.     -q    Es erfolgen keine Sicherheitsabfragen.
  4754.     -l    Es wird der angegebene Diskettenname (Volume-Label) erzeugt.
  4755.     Drive    Das zu formatierende Laufwerk. Es gilt nur der erste 
  4756.         Buchstabe, d.h. es sind äquivalent:
  4757.             format A:
  4758.             format a:
  4759.             format a
  4760.             format abcdefg
  4761.             format
  4762.         Default ist Laufwerk A:.
  4763.  
  4764.  
  4765. Beispiele:
  4766. 1) format
  4767.     Formatiert die Diskette in Laufwerk A: mit 2 Seiten, 80 Tracks pro
  4768.     Seite, 9 Sektoren pro Track mit Interleave 1 und Virgin 0xe5e5. Es
  4769.     wird ein nicht-ausführbarer Bootsektor angelegt. Es wird kein Dis-
  4770.     kettenname erzeugt
  4771.     => der Standardaufruf zum Formatieren von Disketten.
  4772. 2) format B: -ldisk1
  4773.     Formatiert die Diskette in Laufwerk B: mit den unter 1) beschrie-
  4774.     benen Standardwerten. Außerdem wird der Diskettenname "disk1" er-
  4775.     zeugt.
  4776. 3) format -s10 B:
  4777.     Formatiert die Diskette in Laufwerk B: mit 10 Sektoren pro Track.
  4778. 4) format -s10 -q B:
  4779.     Wie 3), aber ohne Sicherheitsabfrage.
  4780. 5) format -s10 -v0 -N
  4781.     Formatiert die Diskette in Laufwerk A: mit 10 Sektoren pro Track.
  4782.     Die Sektoren werden mit Nullen gefüllt. Es wird kein Bootsektor
  4783.     angelegt. Es erfolgt eine Sicherheitsabfrage wegen eines unge-
  4784.     wöhnlichen Virgin-Wertes (-v0).
  4785. 6) format -s10 -v0 -N -q
  4786.     Wie 5), aber ohne Sicherheitsabfrage.
  4787.  
  4788.  
  4789. Vorsicht:
  4790.     Die Parameter -i (Interleave) und -v (Virgin) sollten nur in
  4791.     Sonderfällen geändert werden. Der Interleave-Faktor muß mit der
  4792.     Anzahl der Sektoren pro Track teilerfremd sein (wird vom Pro-
  4793.     gramm nicht überprüft!!!!)
  4794.  
  4795.  
  4796. Laufzeit:
  4797.     format        (Standardwerte zweiseitig)
  4798.         dauert ca. 1 Minute 38 Sekunden
  4799.     format -1    (Standardwerte einseitig)
  4800.         dauert ca. 50 Sekunden
  4801.     format -B    (Anlegen eines Bootsektors ohne Formatierung)
  4802.         dauert ca. 2 Sekunden
  4803.     (Alle Zeiten incl. Ladezeit des format-Programms von Festplatte,
  4804.     beim Aufruf mit -q [ohne Sicherheitsabfrage]. Gemessen mit dem
  4805.     time-Kommando.)
  4806.  
  4807. -----
  4808. gem - Benutzung der Accessories
  4809.  
  4810. Dateien: gem.prg, gem.rsc
  4811. Source:  gem.c
  4812. Syntax:  gem
  4813.  
  4814. Es wird ein GEM-Desktop mit Menüzeile angezeigt. Von dieser Menüzeile aus
  4815. können die installierten Accessories benutzt werden. Außerdem enthält
  4816. die Menüzeile weitere Menüs, deren Einträge Shellkommandos sind. Durch
  4817. Anwählen werden diese Kommandos von der aufrufenden Shell (durch die
  4818. system()-Funktion über den _shell_p-Zeiger) ausgeführt.
  4819. Der Menübaum befindet sich in der Datei gem.rsc. Mit einem Resource
  4820. Construction Program können die Menüs verändert werden. Es können
  4821. beliebig viele weitere Menüs und Menüpunkte hinzugefügt oder alte ge-
  4822. löscht werden. Allerdings darf sich in der RSC-Datei nur ein Objektbaum
  4823. befinden.
  4824. gem wird durch anklicken eines Menüeintrages namens `exit' beendet. Dieser
  4825. Eintrag befindet sich normalerweise im Desk-Menü, darf sich aber auch in
  4826. einem der anderen Menüs befinden. Achtung: wenn es keinen Menüeintrag
  4827. namens `exit' gibt, kann gem nicht beendet werden. Aus diesem Grund sollte
  4828. das Desk-Menü unverändert bleiben.
  4829.  
  4830. -----
  4831. showpic - Screenformat-Bilder anzeigen
  4832.  
  4833. Datei: showpic.sh
  4834. Syntax: showpic
  4835.  
  4836. Dieses Shellscript ist ein Beispiel zur Programmierung der Shell. Es läßt
  4837. den Anwender eine Datei in einer Fileselect-Box auswählen und bestimmt
  4838. anhand des Dateinamen-Extenders, ob es sich um eine Doodle-Datei (.PIC,
  4839. Dateilänge 32000 Bytes) oder eine Degas-Datei (.PI3, 32066 Bytes) handelt,
  4840. und bestimmt entsprechend die Länge des Dateiheaders (Doodle 0, Degas 34
  4841. Bytes). Wenn der Extender weder .PIC noch .PI3 ist, muß der Anwender die
  4842. Länge des Headers eingeben.
  4843. Danach wird das Bild geladen und angezeigt. Nach einem Druck auf ENTER wird
  4844. der Bildschirm gelöscht, und das ganze beginnt von vorne, bis der Anwender
  4845. "Abbruch" anwählt.
  4846.  
  4847. Das Script demonstriert die vielfältigen Möglichkeiten der Shell-Pro-
  4848. grammierung mit Variablen, Pipes, Eingaben, Shellflags und dem if- und
  4849. while-Kommando.
  4850.  
  4851. ----------------------------------------------------------------------------
  4852. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4853. An diese Stelle können weitere Erklärungen hinzugefügt werden, die bei Druck
  4854. auf Help nach einem Kommando erscheinen sollen,  z.B. Erklärungen zu eigenen
  4855. externen Kommandos oder Abschnitte aus okami.doc. Bitte das Format beachten:
  4856. - Zeile aus fünf Minuszeichen
  4857. - Zeile, die mit dem Stichwort beginnt
  4858. - Erklärung geht bis zur nächsten Zeile aus fünf Minuszeichen (exkl.)
  4859. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4860.